プリペアードステートメントの更新

概要

可変パラメータを使用する場合は業務や状況に応じて変化する。パラメータにシングルクォートなどを使用している場合はエラーになるので処理ができるように可変パラメータを自動エスケープする仕組みが必要。


サンプル

ソース

<?php
/*******************************************
 * PDO
 *******************************************/
 
try{
    // MySQLサーバへ接続
    $pdo = new PDO(
        "mysql:host=localhost; dbname=pdotest", 
        "root", 
        "");
var_dump($pdo);
 
    // プリペアードステートメント発行
    $sql = "
    SELECT
        `id`
      , `title`
      , `content`
    FROM
        `cd`
    WHERE
        `id` > ?
    ";
    $stmt = $pdo->prepare($sql);
 
    // bindParamでパラメータ設定(変数未割り当て)
    $stmt->bindParam(1, $id); 
 
    // 変数設定
    $id = 16;
 
    // 実行
    $stmt->execute();
    // 結果取得
    var_dump($stmt->fetch(PDO::FETCH_ASSOC));
 
    echo "---------------" . PHP_EOL;
 
    // 解放
    $stmt = null;
 
    $sql = "
    SELECT
        `id`
      , `title`
      , `content`
    FROM
        `cd`
    WHERE
        `id` > :id
    ";
    $stmt = $pdo->prepare($sql);
 
    // 変数設定
    $id2 = 15;
 
    // bindParamでパラメータ設定
    $stmt->bindValue(":id", $id2); // 未定義の変数を割り当てるとエラーになる
 
    // 実行
    $stmt->execute();
 
    var_dump($stmt->fetch(PDO::FETCH_ASSOC));
 
    echo "---------------" . PHP_EOL;
 
    // クエリー発行
    $sql = "
    SELECT `id`, `title`, `content`FROM `cd` WHERE `id` = 16";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
 
    // パラメータ割り当て
    $stmt->bindColumn("id", $id);
    $stmt->bindColumn("title", $title);
    $stmt->bindColumn("content", $content);
 
    // 実行して結果を変数へ設定
    $stmt->fetch();
 
    var_dump($id, $title, $content);
    echo "---------------" . PHP_EOL;
    $stmt = null;
 
    // クエリー発行
    $sql = "
    SELECT `id`, `title`, `content`FROM `cd` WHERE `id` = 17";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
 
    // パラメータ割り当て
    $stmt->bindColumn(1, $id);
    $stmt->bindColumn(2, $title);
    $stmt->bindColumn(3, $content);
 
    // 実行して結果を変数へ設定
    $stmt->fetch();
 
    var_dump($id, $title, $content);
    echo "---------------" . PHP_EOL;
    $stmt = null;
 
}catch(PDOException $e){
    var_dump($e->getMessage());
}
 
// 切断
$pdo = null;
 
 
 



最終更新:2012年12月08日 23:46