0

編集スクリプトを使用すると、何らかの理由でこのエラーが発生します。POST値を入力して、経由で実行することさえ試みましたPHPmyAdmin。これが私が得たエラーです:

#1064 - 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 'drop=1, sell=10, cash=10, law=7, boss=1 WHERE ID=11' at line 1

クエリは次のとおりです。

UPDATE toondb SET name='$_POST[toonname]', tlaff=$_POST[tlaff], ttype=$_POST[ttype], toonup=$_POST[toonup], trap=$_POST[trap], lure=$_POST[ lure]、sound=$_POST[sound]、throw=$_POST[throw]、squirt=$_POST[squirt]、drop=$_POST[drop]、sell=$_POST[sell]、cash=$_POST[cash] 、law=$_POST[law]、boss=$_POST[boss] WHERE ID=$_POST[ID]

値が入力されたものを次に示します。

UPDATE toondb SET name='ik'、tlaff=137、ttype=2、toonup=1、trap=1、lure=1、sound=1、throw=1、squirt=1、drop=1、sell=10、cash =10、法律=7、上司=1 WHERE ID=11

すべての列はINT名前以外にあります。名前はvarchar.

4

4 に答える 4

3

この単語dropは予約済みのキーワードです。バッククォートを使用してエスケープします。

このような:

UPDATE toondb SET name='ik', tlaff=137, ttype=2, toonup=1, trap=1, lure=1,
    sound=1, throw=1, squirt=1, `drop`=1, sell=10, cash=10, law=7, boss=1 WHERE ID=11
于 2013-03-16T21:16:02.103 に答える
2

あなたの問題は にありますdropDROPは MySQL の予約語なので、バッククォートでカプセル化する必要があります

`drop` = 1

ただし、ステートメントには他の問題もあります。SQL インジェクションの影響を受けやすい

于 2013-03-16T21:16:09.380 に答える
0

すでに投稿された回答は正しいです (DROPは予約語です)。like の構文は技術的に正しくないことを強調したいだけです。$_POST[toonname]数値以外のインデックスは引用符で囲まれているはずです: $_POST["toonname"]or $_POST['toonname']. 使用している構文は、PHP が「キー キャスティング」と呼ばれるものをサポートしているためにのみ機能します。ドキュメントで警告されているように、これはおそらく常にサポートされているとは限らず、予期しない結果が生じる可能性があります: http://php.net/manual/en /language.types.array.php#language.types.array.donts

于 2013-03-16T21:23:22.423 に答える
0

予約語を使用している場合に備えて、列名をバックティックに入れてみてください。

于 2013-03-16T21:17:46.970 に答える