PHPのmysqlndとmysqliの違い

開発環境を構築するときにphp-mysqlndではなくphp-mysqliをインストールするようになって、「php-mysqlndをインストールしなくていいんだっけ?」と思って調査したときの覚書。

環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6


mysqlndとは?

PHPとMySQL(MariaDB)サーバーとの通信するためのライブラリ。
MySQL Native Driverが正式名称。

PHP5.3以前はMySQL Client Library(libmysql)が使われていたが、これはMySQL側が開発したものでありライセンスの問題があった。
そのためPHPプロジェクトで書き直されたものがMySQL Native Driver。
PHP5.4からデフォルトで有効。

参考: PHP: Mysqlndの概要 - Manual
参考: MySQL :: MySQL native driver for PHP - mysqlnd
参考: MySQL Native Driver for PHP, mysqlnd


mysqlndとphp-mysqliとの違い。

mysqlndはPHPのソースコードに組み込まれたライブラリ。
php-mysqliはPHP拡張モジュール。

MySQLサーバーに接続するプログラムはphp-mysqliが提供しているAPIで記述する。

php-mysqliは
MySQL Native Driver(mysqlnd)と
MySQL Client Library(libmysql)の
どちらのライブラリを使うか選択できる。


MySQL Native Driver(mysqlnd)を使っているか確認。

どのライブラリを使うかはコンパイル時に決める。
参考: PHP: どのライブラリを選ぶか - Manual

PHPのビルドオプションを表示する。
見やすいように改行する。
# php-config --configure-options | sed -e 's/ --/\n--/g'

...
--enable-mysqlnd
...

mysqliが読み込まれているか確認。
# php --ini

....
Loaded Configuration File:         /usr/local/etc/php.ini
...
/usr/local/etc/php/ext-20-mysqli.ini,
...

mysqliとmysqlndの設定はphp.iniを参照する。
# less /usr/local/etc/php.ini

基本的に設定を変更する必要はない。


【関連記事】