主にWEB関係の話。

スポンサード リンク

PDOとMYSQLの組み合わせでLIMITを使う場合の注意点

注意点というほどでも無いかもしれないけど、一度ハマった事があるので・・・。

$sql = "SELECT * FROM example_tbl WHERE name=? age=?";
$sth = $dbh->prepare($sql);
$sth-> execute(array('あいうえお' , 18));

という感じで配列で渡すと非常に手軽だけれど・・・

$sql = "SELECT * FROM example_tbl WHERE name=? age=? LIMIT ?,?";
$sth = $dbh->prepare($sql);
$sth-> execute(array('あいうえお' , 18, 0, 30));

といった感じでLIMITの値を渡すとエラーが出る。
配列で渡す場合、全て文字列として渡すらしく、LIMITに文字列を渡してしまった事が原因らしい。

なので、LIMITを利用する場合、bindValueなどを用いて

$sql = "SELECT * FROM example_tbl WHERE name=? age=? LIMIT ?,?";
$sth = $dbh->prepare($sql);
$sth-> bindValue( 1, $name);
$sth-> bindValue( 2, $age);
$sth-> bindValue( 3, $offS, PDO::PARAM_INT );
$sth-> bindValue( 4, $offL, PDO::PARAM_INT );
$sth-> execute();

という感じで、明示的に数値として渡してやるか、そもそもLIMITに渡す値に数値以外が含まれるはずがないと割り切って、値のチェックを自力で行って予めクエリに組み込んでやるといいかもしれない。

スポンサード リンク

人気記事

最近の投稿

カテゴリー

タグ