神秘的mysql错误

时间:2010-01-23 06:18:32

标签: php mysql mysql-error-1064

我对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 个答案:

答案 0 :(得分:4)

$year之后缺少引用。

当MySQL发出这样的错误时(bla bla bla附近),错误通常在它提到的字符串之前。在这种情况下,'ipuhgbi'映射到$ city,所以你知道它在'$ city'之前,我们在那里看到了什么? Voila,缺少引用。

答案 1 :(得分:0)

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

另外,关于SQL注入的read this StackOverflow question carefully

答案 2 :(得分:0)

看起来错误行的最后一个单引号未被转义。

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

答案 3 :(得分:0)

您需要确定的事情很少:

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

    插入表格set ='field_value',field2 ='field_value'//等等