PHPでデータベースを扱う場合フレームワークを以外だとPDO(PHP Data Object)を多く使います。
PDOの利点
PHPで用意されているネイティブ関数をPHPスクリプトでラッピングしてたPEAR::DBなどと違いPDOは「PHP Extension(PHP拡張)」なので、動作速度がそれほど問題にならないところです。大量のデータを扱う場合などはやはりこの「処理速度」というのは重要になってきます。
PDOでのテータベース接続と切断
PDOでデータベースに接続する場合と切断する場合です。try〜catch文で例外を補足します。HOSTやDBNAMEなどは定数として設定しておいた方が便利です。
接続
try {
// MySQLサーバへ接続
$pdo = new PDO("mysql:host=HOST; dbname=DBNAME","USER", "PASSWORD");
} catch(PDOException $e){
var_dump($e->getMessage());
}
切断
$pdo = null;
PDOでデータを扱う
DML(データ操作言語)についてです。「SELECT」「INSERT」「UPDATE」。「DELETE」の4つです。
SELECT(抽出)
データベースからデータを呼び出す場合の方法です。「query」を使う場合は「execute()」は使わない点に注意します。PDOクラスのメソッドであるfetchを使ってデータを取り出す例です。PDO::FETCH_ASSOCによって最後まで同じように列名を記述しながら配列でとりだします。
$stmt = $pdo->query("SELECT * FROM TABLE_NAME ORDER BY id ASC");
$i = 0;
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$data[$i]['id'] = $row['id'];
$contracts_list[$i]['created'] = $row['created'];
$i++;
}
COUNT
ある条件のデータ件数を数えたい時に使います。
$sql = 'SELECT COUNT(*) FROM TABEL-NAME WHERE delete_flag = :delete_flag';
$stmt = $pdo->prepare($sql);
$stmt -> execute();
$count = $stmt -> fetchColumn();
echo $count;
INSERT(追加)
$sql = "INSERT INTO TABEL-NAME (created) VALUES (:created)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':created', $created, PDO::PARAM_STR);
$stmt->execute();
UPDATE(更新)
$sql = "UPDATE TABEL-NAME SET created=:created WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':created', $created, PDO::PARAM_STR);
$stmt->execute();
DELETE(削除)
$sql = "DELETE FROM TABEL-NAME WHERE created = :created";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':created', $created, PDO::PARAM_STR);
$stmt->execute();
query()とexecute()の違い
query()と prepare+execute()の違いは変数を利用するかどうかです。変数の割り当てがある場合は基本的に prepare+execute()を使って、固定のSQLをたたく場合はquery()を使います。今回SELECTはquery()を使っていますが、SELECTだからquery()を使うということではありません。