2016-03-22 10 views
0
$query="UPDATE `a`.`b` SET `aa` = ?, `ab` = ?, ac` = ?, `ad` = ?, `ae` = ?, `af` = ?, `ag` = ? WHERE `aa` = ? AND month(ac)= ?;"; 

クエリが実行されているが、データベースを更新していない...このPrepared Update SQLクエリのエラーはどこですか?

+3

acのbacktickがありませんか? – user234461

+0

実行しても更新しない場合は、一致しない可能性があります。 – scaisEdge

+0

プリペアドステートメントのSQLテキストの最後にセミコロンがありますか?私はそれが誤りであることを知らないが、それは私には本当に奇妙に見える。また、 'ac'識別子はステートメントの2番目の参照でエスケープされません。他のすべての識別子がエスケープされていることは本当に奇妙に見えます。最も明白な問題は、もちろん他の人が指摘しているように、誤植、 'ac 'の不均衡なバックティックです。 – spencer7593

答えて

1
[..snip..] = ?, ac` = ?, `ad` = ?, [..snip.] 
       ^

が不足している何かを注意してください?そして、これらのフィールド/テーブル名のうちのどれもが最初にバッククォートを必要とすることに注意してください。とにかく予約語はありません。

+0

私はこの回答がdownvoteを受け取った理由を理解していません。不思議なことに、その同じ列 'ac'への参照は、後のステートメントではバッククウォートで囲まれていません。 (個人的には、バッククォートを使用しないことをお勧めしますが、バックティックを使用するというパターンに従えば、私はどこでもそれをやるでしょうし、ORMやその他のラッパー/ハンドラを書くと、SQLが生成されますORMはすべての識別子をエスケープするでしょう。なぜなら、特定の識別子をエスケープする必要があるかどうかを調べるよりも簡単で簡単になるからです。私のORMはANSI_QUOTESとバッククイックを処理します。 – spencer7593

+1

明白なタイプミスは、評判のポイントを得るにはちょっとした方法です。 –

関連する問題