LoginSignup
0
0

PDOでデータベースと接続 (基本)

Posted at

PDOクラスで接続する方法

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';


// 例外処理 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を編集
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は、結果セットの各行をカラム名をキーとする連想配列として返すモードを指定します。

つまり、この設定により、データベースから取得したデータは以下のような形式で返されます。

sample.php
[
    '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に設定するかどうかは、特定の状況や要件に基づいて決定されるべきです。データベースのタイプやバージョン、セキュリティの要件、パフォーマンスの要求などを考慮して、適切な設定を選択する必要があります。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0