1

私は決してmysqlの経験がなく、次のコード行でエラーが発生し続けます:

$sql= "INSERT INTO songs (unique_show_id, artist, date, year, city, state, venue, taper, transfered_by, source, mic_loc, lineage, uploaded_by, uploaded_on, show_notes, show_xml)
            VALUES('$showId', '$artist', '$showDate', '$year, '$city', '$state', '$venue', '$taper', '$transferer', '$source', '$mic_loc', '$lineage', '$uploader', NOW(), '$show_notes', '$show_xml')";    

//check to see if the query went through
            if (!mysql_query($sql,$con)){
              echo "query fail";
            die('Error: ' . mysql_error());
    }

単純化したものだと思いますが、エラーがどこにあるのかわかりません。私が得るエラーメッセージは次のとおりです。

query failError: 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 'ipuhgbi', 'CA', '', '', '', '', '', '', 'danwoods', NOW(), '', '<show id=\'gm198' at line 2  

挿入する値の一部は NULL ですが、読んだ限りでは問題にはならないと思います。何か案は?

4

4 に答える 4

4

の後に引用符がありません$year

MySQL がこのようなエラー (bla di bla の近く) を発行する場合、エラーは通常、言及されている文字列の直前にあります。この場合、'ipuhgbi' は $city にマップされるので、'$city' の直前にあることがわかります。そこには何が表示されますか? 出来上がり、引用がありません。

于 2010-01-23T06:26:05.330 に答える
0

$variables のすべてで使用mysql_real_escape_string()する必要があります。

また、SQL インジェクションに関するこの StackOverflow の質問をよくお読みください

于 2010-01-23T06:22:21.017 に答える
0

エラー行の最後の一重引用符がエスケープされていないようです。

クエリに入るすべての文字列をサニタイズすることを忘れないでください。

于 2010-01-23T06:22:49.713 に答える
0

確認する必要があることはほとんどありません。

  1. クエリを介して主キーを挿入しません (コード内の unique_show_id など)。
  2. 数値については、一重引用符を使用しません。
  3. カウントの問題を回避するために、レコードを挿入する set バリアントを使用することをお勧めします。
  4. 数値には intval を、文字列には mysql_real_escaps_string を使用して、インジェクションの問題や一重引用符のクエリ エラーを回避します。

    テーブルに挿入する set field='field_value', field2='field_value' // など

于 2010-01-23T06:23:49.333 に答える