2012-07-10 20 views
5

ちょうど最近、私はPHP/MySQLでPDOを使用するように切り替えて、数十のクエリを変換しました。無効なパラメータ番号:バインド変数の数が一致していない番号それらのほとんどは、しかし、この非常に簡単なものが$sql->execute()PDO - 無効なパラメータ番号

$sql=$pdo->prepare("SELECT id FROM user WHERE username = :username LIMIT 1"); 
$sql->execute(array(':username',$username)); 

はPDOStatement ::(実行)pdostatement.execute SQLSTATE [HY093]で例外がスローされ、働いていましたhttps://bugs.php.net/bug.php?id=60515

...ので、

にクエリを変更しようとしました:の

は、研究の後、私は、このリンクを見つけた...内のトークン210

$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = :username LIMIT 1"); 
$sql->execute(array(':username',$username)); 

しかし、同じ結果がまだあります。誰が明らかに何が間違っているのか、他のすべての人がこのクエリを実行したのはなぜですか?

ありがとうございます!

+0

"* PDO - 無効なパラメータ番号**ですが正しい***です"。いいえ、間違っています。 – Lion

+0

@ライオン:ええ、あなたは正しい...すでにタイトルを変更...私は盲目だった、あなたの助けてくれてありがとう! – Chris

答えて

5

':username',$username作品でなければなりません入力専用値の正しい配列:

$sql->execute(array(':username' => $username)); 

プレースホルダ:

あなたはまた、これを使用することができます:

$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = ? LIMIT 1");  

$sql->execute(array($username)); 

しかし、あなたはこれまであなたのクエリを変更する必要があり、このため

? palceholderとして動作し、配列から変数を取得します。 SQL文でより多くのプレースホルダを使用すると、関数はすべての変数をその配列の配列から取り出します。

11

これはバグではなく、1つのプレースホルダに対して2つのパラメータを指定します。

$sql->bindParam(':username', $username, PDO::PARAM_STR); 

はこちらをご覧ください:実行するためにhttp://www.php.net/manual/de/pdostatement.bindparam.php

をあなたが渡す必要が

$sql->execute(array(':username',$username)); 

はbindParam()メソッド

$sql->execute(array(':username' => $username)); 
+0

ああ私の神...ありがとう!残念だ! – Chris

関連する問題