PDO – PHP Data Object
データベースの種類に関わらず同じ手順でアクセスできる。
すなわち、データベースの種類を隠蔽できる。
接続
try { $dbh = new PDO('mysql:host=localhost;dbname=blog_app', 'dbuser001', 'dbuser001'); } catch (PDOException $e) { var_dump($e->getMessage()); exit; }
切断
$dbh = null;
クエリー
// レコード抽出 $sql = 'select * from users'; $stmt = $dbh->query($sql); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) { var_dump($user['name']); } // レコード件数 echo $dbh->query('select count(*) from users')->fetchColumn();
プリペアドステートメント
エスケープ処理を任せることができる。
プレースホルダを使ってSQLを記述
$stmt = $dbh->prepare('insert into users (name,email,password) values (?,?,?)'); $stmt = $dbh->prepare('insert into users (name,email,password) values (:name,:email,:password)');
プレースホルダに入る値を指定して実行
$stmt->execute(array('n','e','p'); $stmt->execute(array(':name'=>'n', ':email'=>'e', ':password'=>'p'));
プレースホルダと変数をバインドして実行
$stmt->bindParam(':name', $name); $stmt->bindParam(':email', $email); $stmt->bindParam(':password', $password); $name = 'Yamada'; $email = 'yamada@example.com'; $password = 'test123'; $stmt->execute(); echo $dbn->lastInsertId();
更新
$stmt = $dbh->prepare('update users set email = :email where name like :name'); $stmt->execute(array(':email'=>'abc@example.com', ':name'=>'Hanako'));
削除
$stmt = $dbh->prepare('delete from users where password = :password'); $stmt->execute(array(':password'=>'abc123')); echo $stmt->rowCount(); 削除件数