PDOでプリペアードステートメントを使ってDB操作をしていて、
OFFSET と LIMIT に値をバインドできなかった。
エラーになる。
$sql = "SELECT * FROM test LIMIT :limit OFFSET :offset"; $db = $this->connectDb(); $stmt = $db->prepare($sql); $stmt->bindValue(':offset', $_offset); $stmt->bindValue(':limit', $_limit); if(!$stmt->execute()){ echo 'error'; //ここでエラーになる。 } $results = array(); while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ $results[] = $result; }
これは PDO::bindValue() でバインドする値に対して型を明示的に指定してないのが
原因だった。
なので以下のように指定する。
$stmt->bindValue(':offset', (int)$_offset, PDO::PARAM_INT); $stmt->bindValue(':limit', (int)$_limit, PDO::PARAM_INT);
型の定数は以下に載っている。
http://php.net/manual/ja/pdo.constants.php
さらに、変数もキャストした方がいい。