端くれプログラマの備忘録 PHP [PHP] PDOを使ったデータベースのアクセス

[PHP] PDOを使ったデータベースのアクセス

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(); 削除件数