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

您需要在每一个 $ 变量中使用。mysql_real_escape_string()

另外,请仔细阅读有关 SQL Injections 的StackOverflow 问题

于 2010-01-23T06:22:21.017 回答
0

看起来错误行上的最后一个单引号没有转义。

您需要记住清理进入查询的所有字符串。

于 2010-01-23T06:22:49.713 回答
0

您需要确定的事情很少:

  1. 您不会通过查询插入主键(例如代码中的 unique_show_id)
  2. 对于数字,您不使用单引号。
  3. 最好使用避免计数问题的插入记录的集合变体,例如:
  4. 对数字使用 intval,对字符串使用 mysql_real_escaps_string 以避免注入问题以及单引号查询错误。

    插入表 set field='field_value', field2='field_value' // 依此类推

于 2010-01-23T06:23:49.333 回答