PDO – PHP Data Object
データベースの種類に関わらず同じ手順でアクセスできる。
すなわち、データベースの種類を隠蔽できる。
接続
1 2 3 4 5 6 |
try { $dbh = new PDO('mysql:host=localhost;dbname=blog_app', 'dbuser001', 'dbuser001'); } catch (PDOException $e) { var_dump($e->getMessage()); exit; } |
切断
1 |
$dbh = null; |
クエリー
1 2 3 4 5 6 7 8 |
// レコード抽出 $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を記述
1 2 |
$stmt = $dbh->prepare('insert into users (name,email,password) values (?,?,?)'); $stmt = $dbh->prepare('insert into users (name,email,password) values (:name,:email,:password)'); |
プレースホルダに入る値を指定して実行
1 2 |
$stmt->execute(array('n','e','p'); $stmt->execute(array(':name'=>'n', ':email'=>'e', ':password'=>'p')); |
プレースホルダと変数をバインドして実行
1 2 3 4 5 6 7 8 |
$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(); |
更新
1 2 |
$stmt = $dbh->prepare('update users set email = :email where name like :name'); $stmt->execute(array(':email'=>'abc@example.com', ':name'=>'Hanako')); |
削除
1 2 3 |
$stmt = $dbh->prepare('delete from users where password = :password'); $stmt->execute(array(':password'=>'abc123')); echo $stmt->rowCount(); 削除件数 |