プリペアードステートメントの更新
概要
可変パラメータを使用する場合は業務や状況に応じて変化する。パラメータにシングルクォートなどを使用している場合はエラーになるので処理ができるように可変パラメータを自動エスケープする仕組みが必要。
サンプル
ソース
<?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