2014年7月14日月曜日

PHP の PDO で条件部分に変数を使う際の注意

例えば LIMIT や ORDER BY の 後ろに変数を使おうとして、
こんな感じに書くと false が返ってくる。
$num = 5;
$sth = $dbh->prepare('SELECT * FROM `my_table` LIMIT :num');
$sth->bindValue(':num', $num);
$sth->execute();  // false

$num の値が : num の中に文字列として展開されていることが原因。
データ型を指定するとうまくいく。
$sth = $dbh->prepare('SELECT * FROM `my_table` LIMIT :num');
$sth->bindValue(':num', $num, PDO::PARAM_INT);
$sth->execute();  // データを取得できる


PDO 定義済み定数 | PHP
http://jp2.php.net/manual/ja/pdo.constants.php

参考
PHPのPDOでLIMIT句でエラーが発生した時の対処 | SUSH-i LOG
http://blog.sus-happy.net/201207/php-pdo-limit/

0 件のコメント:

コメントを投稿