PHPのデータベース接続方法
下記の2種類あります。
- PDO
- mysqli
PDOとは?
「PHP Data Object」の略で、ORマッパーの役割があります。データベースの種類問わず同じようにアクセスができるのが特徴です。
使い方
接続情報を変数に格納する。
1 2 3 |
const DB_HOST = 'mysql:dbname=データベース名;host=IPアドレス;charset=utf8'; const DB_USER = 'ユーザー名'; const DB_PASSWORD = 'パスワード'; |
接続処理
1 2 3 4 5 6 7 8 9 10 11 12 |
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::ATTR_ERRMODE | エラーモードです。「PDO::ERRMODE_EXCEPTION」を指定すると例外を返すという意味になります。これはほぼ必須のオプションと考えて良いでしょう。 |
PDO::ATTR_EMULATE_PREPARES | falseを指定するとSQLインジェクション対策になります。 |
データベースからデータを取得する。
ユーザー入力がある場合
ユーザー入力がない予め決められたSQLを実行する場合は下記のメソッドを実行します。
- query
実装
1 2 3 4 5 6 7 8 |
$sql = 'SELECT文'; //sql $stmt = $pdo->query($sql); //sql実行 ステートメント $result = $stmt->fetchall(); echo '<pre>'; var_dump($result); echo '</pre>'; |
ユーザー入力がない場合
ユーザー入力がある場合はSQLインジェクション対策を意識する必要があるので下記のメソッドを使います。
- prepare
- bind
- execute
1 2 3 4 5 6 7 8 9 10 |
$sql = 'select * from テーブル名 where id = :id'; //名前付きプレースホルダ $stmt = $pdo->prepare($sql);//プリペアードステートメント $stmt->bindValue('id', 1, PDO::PARAM_INT);//紐付け $stmt->execute(); //実行 $result = $stmt->fetchall(); echo '<pre>'; var_dump($result); echo '</pre>'; |
トランザクション処理
トランザクションとして処理したい場合は下記の構文を使います。
1 2 3 4 5 6 7 8 9 10 11 12 |
$pdo->beginTransaction(); try{ //sql処理 $pdo->commit(); }catch(PDOException $e){ $pdo->rollback();//更新のキャンセル } |
この記事へのコメントはありません。