PHP自主練 / 1hour
Sep / 27.5hour
Total / 129hour
WEBサービス部の自主練用教材
PDOオブジェクトの[option]って何?
PHPでデータベースに接続する際に、[PDO]というオブジェクトを使用して接続していきます。
コードは大体こんな感じで。
$dsn = 'mysql:dbname=sample;host=localhost;charset=utf8';
$user = 'root';
$password = 'root';
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
);
$dbh = new PDO($dsn, $user, $password, $options);
いつも思っていたことがあるのですが・・・
「最後のoptionってなに?」
ということです。
optionの前三つの項目は分かりやすいです。
$dsn = データベースはmysqlを使って、テーブル名は「sample」、サーバーはローカルホスト、文字コードはutf-8
$user = データベースへアクセスするときのユーザー名はこれ
$password = データベースへアクセスする時のパスワードはこれ
$options = ・・・・何ですかこれ?
ってなりませんか?僕はなりました。
optionは文字通り、PDOのオプションを設定する。
で、このオプションですがこれは簡単にいうと、
「PDOを扱う上で、どんな挙動にしたいのかを選ぶ」
ということになります。
例えば、上記のコードのこの部分
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
これは「エラーモードをサイレントに変更してね」と指示をしている、ということになります。
「じゃあ、PDO::ATTR_ERRMODEとかERRMODE_SILENTってどこから出てきたんすか?」
ってなると思います。
こいつらの正体は「PHPに元々定義されている定数」です。
なので、いきなり出て来てもPHPさんに怒られず、エラーを吐くこともありません。
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
これは、下記のようなことをしてます。
PDO::FETCH_BOTH (デフォルト): 結果セットに返された際のカラム名と 0 で始まるカラム番号で添字を付けた配列を返す。
から、
PDO::FETCH_ASSOC: は、結果セットに 返された際のカラム名で添字を付けた配列を返す。
に変更しておいてね!
という具合です。
ここでどんなオプションが実用的なのかの判断をできるほど、まだ自分の経験は不足していますがコードの意味はしっかりと理解しておきたいとおもいます。
参考
https://www.php.net/manual/ja/pdo.constants.php
https://qiita.com/mpyw/items/b00b72c5c95aac573b71