MySQL 関数 (PDO_MYSQL)
はじめに
PDO_MYSQL は、PHP から MySQL データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェイス を実装したドライバです。
PDO_MYSQLは、 デフォルトでエミュレートされたプリペアドステートメントを使います。
MySQL 8
PHP 7.1.16 より前のバージョン、もしくは PHP 7.2.4 より前の 7.2系の PHP では、 MySQL 8 サーバーのデフォルトパスワードプラグインを mysql_native_password に設定するようにしてください。 さもないと、 The server requested authentication method unknown to the client [caching_sha2_password] のようなエラーを見ることになります。たとえあなたが caching_sha2_password を使っていなくても、です。
これは MySQL 8 のデフォルトが 古い PHP (mysqlnd)
のリリースが認識していないプラグイン caching_sha2_password だからです。
かわりに、my.cnf の設定を
default_authentication_plugin=mysql_native_password
と変更してください。
caching_sha2_password プラグインは、
PHP 7.4.4 以降で完全にサポートされました。
これより前のバージョンでは、
mysql_xdevapi
拡張モジュールでサポートされています。
注意: MySQL のテーブル型 (ストレージエンジン) の中には、 トランザクションをサポートしていないものがあります。 トランザクションをサポートしていないテーブル型を使用して トランザクションを使用するコードを書くと、 MySQL はトランザクションが正常に使用できたかのように振舞います。 さらに、DDL クエリを実行する際には、 実行中のトランザクションが暗黙的にコミットされます。
注意:
MySQL ドライバは、 PDOStatement::bindParam() メソッドで
PDO::PARAM_INPUT_OUTPUT
を適切にサポートしていません。使うことはできますが、 値が更新されません。(つまり、出力が無視されています)
インストール手順
一般的な Unix ディストリビューションには、バイナリ版の PHP がインストールされています。 これらのバイナリ版は、通常は MySQL 拡張モジュールを有効にしてビルドされています。 しかし、拡張モジュールのライブラリ自身を別パッケージでインストールする必要があるでしょう。 使用しているディストリビューションのパッケージマネージャで確認してみましょう。
たとえば Ubuntu なら、php5-mysql
パッケージをインストールすれば、
ext/mysql、ext/mysqli、そして pdo_mysql をインストールできます。CentOS の場合は
php-mysql
パッケージを使えば、同じものをインストールできます。
この拡張モジュールを自分でコンパイルすることもできます。 PHP をソースからビルドすれば、使いたい MySQL 拡張モジュールを指定したり 各拡張モジュールが使用するクライアントライブラリを選択したりすることができます。
--with-pdo-mysql[=DIR] で
PDO MySQL 拡張モジュールをインストールします。オプションの [=DIR]
は、MySQL ベースライブラリの場所です。
Mysqlnd
がデフォルトのベースライブラリです。
どのライブラリを選べばいいのかについての詳細は
MySQL ライブラリの選択
を参照ください。
オプションの --with-mysql-sock[=DIR] で MySQL unix ソケットの場所を指定することができます。これは PDO_MYSQL を含むすべての MySQL 拡張モジュールで利用します。省略した場合はデフォルトの場所を検索します。
オプションの --with-zlib-dir[=DIR] で、 libz のインストールプレフィックスを指定することができます。
$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock
SSL サポートを有効にするには、適切な
Pdo\Mysql::ATTR_SSL_*
を指定します。これは » MySQL C API 関数 mysql_ssl_set()
をコールするのと同じ意味になります。また、SSL を PDO::setAttribute()
で有効にすることはできません。というのも、この時点ではすでに接続が確立されてしまっているからです。
MySQL のドキュメントで » SSL を使った
MySQL への接続 について確認しましょう。
定義済み定数
このドライバでは以下の定数が定義されて
います。これは拡張モジュールが PHP に組み込まれているか、実行時に動的にロード
されている場合のみ使用可能です。さらに、これらのドライバ固有の定数は
そのドライバを使用している場合にのみ使用されます。
あるドライバ固有の属性を別のドライバで使うと、予期せぬ結果を引き起こします。
もし複数のドライバを使用しているコードを実行している場合、
PDO::getAttribute() で PDO::ATTR_DRIVER_NAME
属性を使用することで、使用中のドライバ名を調べることが可能です。
-
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
(int) -
Pdo\Mysql::ATTR_USE_BUFFERED_QUERY
のエイリアス -
PDO::MYSQL_ATTR_LOCAL_INFILE
(int) -
Pdo\Mysql::ATTR_LOCAL_INFILE
のエイリアス -
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
(int) -
Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY
のエイリアス PHP 8.1.0 以降で利用可能です。 -
PDO::MYSQL_ATTR_INIT_COMMAND
(int) -
Pdo\Mysql::ATTR_INIT_COMMAND
のエイリアス -
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
(int) -
Pdo\Mysql::ATTR_READ_DEFAULT_FILE
のエイリアス -
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
(int) -
Pdo\Mysql::ATTR_READ_DEFAULT_GROUP
のエイリアス -
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE
(int) -
Pdo\Mysql::ATTR_MAX_BUFFER_SIZE
のエイリアス -
PDO::MYSQL_ATTR_DIRECT_QUERY
(int) -
PDO::ATTR_EMULATE_PREPARES
のエイリアス -
PDO::MYSQL_ATTR_FOUND_ROWS
(int) -
Pdo\Mysql::ATTR_FOUND_ROWS
のエイリアス -
PDO::MYSQL_ATTR_IGNORE_SPACE
(int) -
Pdo\Mysql::ATTR_IGNORE_SPACE
のエイリアス -
PDO::MYSQL_ATTR_COMPRESS
(int) -
Pdo\Mysql::ATTR_COMPRESS
のエイリアス -
PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY
(int) -
Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY
のエイリアス -
PDO::MYSQL_ATTR_SSL_CA
(int) -
Pdo\Mysql::ATTR_SSL_CA
のエイリアス -
PDO::MYSQL_ATTR_SSL_CAPATH
(int) -
Pdo\Mysql::ATTR_SSL_CAPATH
のエイリアス -
PDO::MYSQL_ATTR_SSL_CERT
(int) -
Pdo\Mysql::ATTR_SSL_CERT
のエイリアス -
PDO::MYSQL_ATTR_SSL_CIPHER
(int) -
Pdo\Mysql::ATTR_SSL_CIPHER
のエイリアス -
PDO::MYSQL_ATTR_SSL_KEY
(int) -
Pdo\Mysql::ATTR_SSL_KEY
のエイリアス -
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
(int) -
Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERT
のエイリアス -
PDO::MYSQL_ATTR_MULTI_STATEMENTS
(int) -
Pdo\Mysql::ATTR_MULTI_STATEMENTS
のエイリアス
実行時設定
php.ini の設定により動作が変化します。
名前 | デフォルト | 変更可能 |
---|---|---|
pdo_mysql.default_socket | "/tmp/mysql.sock" | INI_SYSTEM |
pdo_mysql.debug | NULL | INI_SYSTEM |
以下に設定ディレクティブに関する 簡単な説明を示します。