2011-07-21 23 views
3

私は、次のコードを実行します。PDO MySQLの構文エラー1064

$conn = new PDO(....); 
.... pdo attributes ... 

$limitvalue = 0; 
$limit = 10; 
$sql = $conn->prepare("SELECT * FROM table1 LIMIT ?, ?"); 
$sql->bindParam(1, $limitvalue, PDO::PARAM_INT); 
$sql->bindParam(2, $limit, PDO::PARAM_INT); 
$sql->execute(); 

を、私は得る:

メッセージでキャッチされない例外 'PDOException'「SQLSTATE [42000]: 構文エラーまたはアクセス違反:1064あなたはSQL 構文でエラーがあります。それだけ、この特定のクエリで発生行1' で「10、NULL」

を近くで使用するために右の構文についてはMySQLサーバのバージョン に対応マニュアルを確認してください。それ以外はOKです。

Btw:私は "コード内"の値のために準備されたステートメントを行うのが馬鹿に見えるかもしれません。しかしそれはほんの一例です。実際、値はページ番号に依存しますが、ここでは重要ではありません。このクエリでも同じエラーが発生しています。 5.3.4RC2とMySQLのは、次のとおりです:誰もが興味を持っている場合は


、PHPのバージョンがあるmysqlnd 5.0.7-devの - 091210 - $リビジョン:304625 $

答えて

4

を使用これはphp bugのようです。バインドされたときにクエリで引用されます。

は、使用してみてください:

$sql->bindParam(1, (int)$limitvalue, PDO::PARAM_INT); 
$sql->bindParam(2, (int)$limit, PDO::PARAM_INT); 

intに型変数を強制的に。

+1

答えをありがとう。それは今働く。しかしもう1つの質問 - なぜ2番目のパラメータ($ limit)がint変換なしで正常に動作していますか?私のSQLクエリが 'LIMIT X、Y'のようなものであれば** X **だけがあなたが言及した変換を必要とするのはなぜですか(** Y **はうまく動作するので)それはバグを参照していますか:)? – Wysiwyf

+1

私は分かりません。これらのバグが大好きです:p。とにかく、ありがとう、 – Arkh

+1

笑。 – Wysiwyf

-2

私にはありませんsqlの制限の最初のパラメータはNULLと考えることができます。 PDOはPARAM_INT定数を無視し、文字列として$limit$limitvalue変数を使用する:あなただけの最初の10件のレコードをしたい場合は、LIMIT 10

+1

NULLではありません - コードでは、 '$ limitvalue = 0' –

+0

私はそれも問題だと思っていました。私は1に変更しましたが、まだこのエラーがあります。そうですね、ここでは関係ありません。 – Wysiwyf

関連する問題