質問: $MySQL_PDO->prepare($SQL); if($stmt->execute($parms)) print_r($stmt->fetchAll()); } catch (PDOException $e) { echo $e->getMessage; exit; }
回答: >$stmt->execute()が実行できなかったといっています。 誰がそういっているのでしょうか? (bindParam/bindValueでなく)executeで渡す値は基本的に「文字列」で渡されます。なので、limit や offset を対象にするとexecuteの返り値が false になっていると思います。 limit のように「確実に整数」と決め打ちできる(あるいは事前に intbal などで整数値に置換してしまえる)ものは、(テーブル名などと同様に)SQL文に直接埋める方がいいと思います。 bindParam や bindValue で PDO::PARAM_INT を指定すれば問題ないかもしれませんが、limit や offset のためにわざわざそれを書くのも面倒でしょうからねぇ(いや、本来はそうすべきですが)。 (蛇足) >1はスローもされず、実行もされません。 例外をthrowするように設定していませんよね。 接続時「だけ」は、無条件に例外が生成されますが、それ以降(SQL実行)でのデフォルトは PDO::ERRMODE_SILENT です。 PDO::ATTR_ERRMODE の値を PDO::ERRMODE_EXCEPTION に設定してください(constructor で option で渡すか setAttribute で設定)。