クエリ操作


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'です。      
参照元::
//この記事は編集中です。