2010-12-02 10 views
1

こんにちは私は "varchar(50)"型を持つmysqlデータベースのフィールド "ammount"を持っています。そのフィールドにデータを挿入すると、ammount = 4 kgのokですが、フィールドを更新すると次のエラーが表示されます。 更新クエリの問題

Error in query: UPDATE ingredients SET ingredient_name='test recipe',ammount=4 gm where ingredient_id='59'. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'gm where ingredient_id='59'' at line 1

と私のクエリが

 $query="UPDATE ingredients SET ingredient_name='$ingredient',ammount=$ammount where ingredient_id='$ingredient_id'";

答えて

2

1)に正しいスペルは "量" です。

2)SQLクエリでは、このような可変補間を使用しないでください。非常に危険ですprepared statementを使用します。

3)$queryを定義するときに$amountを引用符で囲まないため、最後の置換されたクエリ文字列には終りません。エラー・メッセージをよく見てください:SQLが処理しようとした問合せが表示されます。どのようにそれがammount=4 gmと言いますか?それは引用符がないので、それを処理することはできません。

あなたがそうであるようにuse prepared statementsなら、引用はそれ自身を処理します。

+0

+1準備文 –

1

あなたのクエリがあります:間違ってい

...,ammount=4 gm where... 

4 gmの引用符が必要です。

変更

,ammount=$ammount where 

,ammount='$ammount' where 
+0

"うまくいく"とは言いますが、これをしないでください! '$ amount 'がユーザから来た場合、' 'amount' 'のように設定することができます。 DROP TABLEの成分; - 'あなたのテーブルを消去しました。 –

+0

'$ ammount'はクエリで使用される前にどうやってサニタイズされていないのですか? – codaddict

+0

「サニタイズ」は、テキストが特定のパターン(例:<10進数><リストから選択された単位>)と一致するという特定の要件を満たしている場合を除き、決して手で行われるべきではないものです。あなたがそうしたとしても、それは適切に行うことを傷つけることはありません。ライブラリは理由のために存在します。 –