クエリ操作
prepareメソッドはqueryメソッドと同じようですが、少し便利です。
queryメソッドと違う点は、SQL文の一部を変数のように記述して、その部分に当てはめる値を後から指定できます。
またパラメータを自動的にエスケープ処理をしてくれるため、個別のパラメータについてエスケープ処理を行う必要が無くなります。
その為、値が固定で無いSQLを使う場合には、queryメソッドではなくprepareメソッドを使うのが良いらしい。
早速書いてみます。
例えば検索するときにクエリを入れます。
$sql = 'SELECT * FROM `test` WHERE `name` LIKE :kensaku ';
$st = $db->prepare($sql);
普通なら、この時点で検索する文字kensakuという部分に:kensaku
$sql = 'SELECT * FROM `test` WHERE `name` LIKE :kensaku ';
$st = $db->prepare($sql);
$st->execute(array(':kensaku'=>'あうあうあう'));
while($result = $st->fetch(PDO::FETCH_ASSOC)){
print($result['id']);
print($result['name'].'
');
}
これで検索ができます。
つまりprepare過程で:名前で仮で用意して、execute実行でいけます。
また上記の場合、??でもいけます。
$sql = 'SELECT * FROM `test` WHERE `name` LIKE ? ';
$st = $db->prepare($sql);
$st->execute(array('あうあうあう'));
もし複数の場合は
$sql = 'SELECT * FROM `test` WHERE `name` LIKE ? OR `name` LIKE ? ';
$st = $db->prepare($sql);
$st->execute(array('あうあうあう','いいいいい'));
また、execute前にバインドさせる事もできます。
PDOStatement->bindValue() — 値をパラメータにバインドする
$st->bindValue(':kensaku', 'あうあうあう', PDO::PARAM_STR);
最後にPDO::PARAM_STRと付いていますが、
これはオプションで、データ型を指定できます。
他にも、bindParamというのもあります。
bindParamとbindValueの違いは、
bindValueとbindParamの違い。
bindValue()は「値」をバインドし、bindParam()は「変数」をバインドします。
$a='1';
$pdo1->bindValue(1,$a);
$pdo2->bindParam(1,$a);
$a='2';
$pdo1->execute();
$pdo2->execute();
とした場合、$pdo1にバインドされるのは'1'で、$pdo2にバインドされるのは'2'です。
参照元::
//この記事は編集中です。