PDOクラスで接続する方法
- 参考: PDO::__construct ※ 一番初めに呼ばれる
db_connection.php
を作成及び編集
<?php
// 直書きでも良いが定数として定義
const DB_HOST = 'mysql:dbname=hoge_db;host=127.0.0.1;port=8889;charset=utf8';
const DB_USER = 'hoge_user';
const DB_PASSWORD = 'hoge123';
// 例外処理 Exception try catch構文
try {
$pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD); // PDOクラスのインスタンス化
echo '接続成功';
} catch (PDOException $e) {
echo '接続失敗' . $e->getMessage() . "\n";
exit(); // 接続失敗時には処理を抜ける
}
-
db_connection.php
にアクセスすると成功時には接続成功
とブラウザに表示される 。
オプションを付ける
-
db_connection.php
を編集
<?php
const DB_HOST = 'mysql:dbname=hoge_db;host=127.0.0.1;port=8889;charset=utf8';
const DB_USER = 'hoge_user';
const DB_PASSWORD = 'hoge123';
try {
$pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD, [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 連動配列で取得する
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 例外を表示する
PDO::ATTR_EMULATE_PREPARES => false // SQLインジェクション対策
]);
echo '接続成功';
} catch (PDOException $e) {
echo '接続失敗' . $e->getMessage() . "\n";
exit();
}
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
をもう少し詳しく説明すると
PDOがデータベースからデータを取得する際のデフォルトのフェッチモードを設定します。
PDO::FETCH_ASSOCは、結果セットの各行をカラム名をキーとする連想配列として返すモードを指定します。
つまり、この設定により、データベースから取得したデータは以下のような形式で返されます。
[
'column_name1' => 'value1',
'column_name2' => 'value2',
// ...
]
PDO::ATTR_EMULATE_PREPARES => false
に関しては chatGPT先生に聞いてみると。。。
PDO::ATTR_EMULATE_PREPARESをfalseに設定するかどうかは、使用しているデータベースやアプリケーションのニーズによって異なります。
通常、PDO::ATTR_EMULATE_PREPARESをfalseに設定することは、プリペアドステートメントをサーバーサイドで実行し、SQLインジェクションなどのセキュリティ上のリスクを軽減するために推奨されます。これにより、PDOは実際にバックエンドデータベースにプリペアドステートメントを送信し、データベースがプリペアドステートメントをサポートしている場合にはそれを使用します。ただし、一部のデータベースや状況では、この機能が正常に機能しないことがあります。
一方、一部のデータベースやアプリケーションでは、PDO::ATTR_EMULATE_PREPARESをtrueに設定することが推奨される場合もあります。これは、特定のデータベースやプリペアドステートメントの動作に関する問題がある場合や、プリペアドステートメントのエミュレーションが必要な場合に該当します。
そのため、PDO::ATTR_EMULATE_PREPARESをtrueまたはfalseに設定するかどうかは、特定の状況や要件に基づいて決定されるべきです。データベースのタイプやバージョン、セキュリティの要件、パフォーマンスの要求などを考慮して、適切な設定を選択する必要があります。
以上です。