WHERE子句上的MySQL错误#1064

时间:2011-06-28 00:13:16

标签: php mysql sql mysql-error-1064

详细

  • Mac OS X Snow Leopard 10.6.7
  • MAMP版本1.7.2
  • PHP Version 5.3.4
  • MySQL 5.0.41
  • 表类型:MyISAM
  • 编码:UTF-8 Unicode(utf8)
  • 整理:utf8_unicode_ci

基本MySQL“INSERT”查询:

$startMonth = $date->getMonth();
$startDay = $date->getDay();
$startYear = $date->getYear();
$startTime = $date->getTime();

$query = sprintf("INSERT INTO todos 
                  VALUES (startMonth, startDay, startYear, startTime)
                  VALUES (%d, %d, %d, %d)
                   WHERE todo = '%s'",
                  mysql_real_escape_string($startMonth),
                  mysql_real_escape_string($startDay),
                  mysql_real_escape_string($startYear),
                  mysql_real_escape_string($startTime),
                  mysql_real_escape_string($todo));

$result = mysql_query($query) or die("A MySQL error has occurred.<br />Your Query: " . $q . "<br /> Error: (" . mysql_errno() . ") " . mysql_error());

这是打印出来的mysql_error:

  

发生了MySQL错误   您的查询:
INSERT INTO todos SET startMonth = 6 AND startDay = 27 AND startYear = 2011 AND&gt; startTime = 1309216538 WHERE todo = todo 2
  错误:(1064)您的SQL语法中有错误;查看与您的&gt; MySQL服务器版本对应的手册,以便在第1行的'WHERE todo = todo 2'附近使用正确的语法

我已经尝试过每一种我能想到的方式。从更改查询到“INSERT INTO todos SET startMonth ...”等

我已经以可能的​​方式编码$todo变量(即addslashes,magic_quotes_pgc(即使它已被弃用......我变得绝望),htmlentities,mysql_real_escape_string ......我能找到的一切和/或者想到)。

3 个答案:

答案 0 :(得分:3)

根据MySQL's documentation,您不能在WHERE语句中使用INSERT子句。您还有2个VALUES条款。看起来您的第一个VALUES子句定义了您要插入的字段而不是值。

如果您尝试INSERT,则需要执行此操作:

$query = sprintf("INSERT INTO todos (todo, startMonth, startDay, startYear, startTime)
                  VALUES ('%s', %d, %d, %d, %d)",
                  mysql_real_escape_string($todo)
                  mysql_real_escape_string($startMonth),
                  mysql_real_escape_string($startDay),
                  mysql_real_escape_string($startYear),
                  mysql_real_escape_string($startTime));

答案 1 :(得分:1)

INSERT INTO todos SET startMonth = 6 AND startDay = 27 AND startYear = 2011 AND >startTime = 1309216538 WHERE todo = todo 2 

应该是

UPDATE todos SET startMonth = 6, startDay = 27, startYear = 2011 WHERE startTime = 1309216538 AND todo = 2;

您对更新语句的正确语法感到困惑。 AND是一个逻辑运算符。通过update语句分配值时,需要使用逗号。 INSERT!=更新。

那,你的陈述还有其他一些疯狂的事情。无论哪种方式,只要您的命名/架构正确

,第二个语句就应该有效

答案 2 :(得分:1)

除了弗朗索瓦解释的INSERT中的两个错误之外,您正在运行一个($query)并打印另一个($q):

$result = mysql_query($query)                                  --- $query is not 
or die("A MySQL error has occurred.<br />Your Query: " . $q    --- same with $q
  . "<br /> Error: (" . mysql_errno() . ") " . mysql_error());