2011-06-22 25 views
1

は、私は次のクエリていますのをエコーPHP PDOは、致命的なエラー

$sql = "UPDATE db.users SET $str WHERE users.{$this->row} = {$this->value} LIMIT 1"; 

:私はしかし

UPDATE db.users SET username=testUser, gid=3 WHERE users.username = mmiller LIMIT 1 

:私は

$count = Db::init()->exec($sql); 

を得る:

Fatal error: Uncaught exception 'PDOException' with message 

'SQLSTATE [42S22]:列が見つかりません: 1054不明な列 ':#0 /class.php(185) /class.php:185 スタックトレースでwhere句 ''' の' mmiller ( 'username'、 'gid'、 'testUser'、 '3')# /2 {メイン}任意のアイデア185

ライン上/class.php に投げ?

答えて

5

あなたの反響はあなたにそれを示していることを確認してください"

UPDATE db.users SET username="testUser", gid="3" WHERE users.username = "mmiller" LIMIT 1 

を使用する必要があります。 ' ofcourseを使用することができます。何でもボートを浮かべてください:)

+0

この場合、今回は "testuser"と同じエラー – grep

+1

が返されますか? P – Nanne

+0

'{$ this-> value}'の前後に '' 'を追加する必要がありますが、' $ set'変数で間違った割り当てもあります。また、あなたは準備が必要ではないと言います。あなたがそれらを使用した場合、あなたはこの問題を抱えていませんでした.... – Nanne

2

文字列値を引用符で囲む必要があります。

$sql = "UPDATE db.users SET $str WHERE users.{$this->row} = '{$this->value}' LIMIT 1"; 

既にPDOを使用していることを確認して、準備済みの文を使用すると便利です。 1回限りのクエリでは少し遅くなりますが、セキュリティが強化され、必要なすべてのエスケープ処理が行われるため、これらの問題に対処することはできません。

+0

Theresはユーザー入力がないので、Prepステートメントを必要としません。しかし、これを引用符で囲むだけで、同じエラーが返されます。 – grep

+0

@Headspinどういうわけか、データベースは "mmiller"が値ではなく列であると考えています。これは通常、文字列値を引用符で囲まずに忘れてしまいます。引用符で囲んだ場合、データベースが列を参照していると思う方法はありません。 –

+0

yer rightは、$ str文字列内の値のうち、引用符を必要とする値の1つであることはわかっています。より完全な答えを修正してください。ありがとう – grep

関連する問題