详细信息
- Mac OS X 雪豹 10.6.7
- MAMP 版本 1.7.2
- PHP 版本 5.3.4
- MySQL 5.0.41
- 表类型:MyISAM
- 编码:UTF-8 统一码 (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:
A MySQL error has occurred.
Your Query:
INSERT INTO todos SET startMonth = 6 AND startDay = 27 AND startYear = 2011 AND >startTime = 1309216538 WHERE todo = todo 2
Error: (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 'WHERE todo = todo 2' at line 1
我已经尝试了所有我能想到的方法。从将查询更改为“INSERT INTO todos SET startMonth...”等。
我已经以各种可能的方式对 $todo
变量进行了编码(即 addslashes、magic_quotes_pgc(即使它已被弃用......我变得绝望)、htmlentities、mysql_real_escape_string......我的一切可以找到和/或想到)。
最佳答案
根据 MySQL's documentation ,您不能在 INSERT
语句中使用 WHERE
子句。您还有 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));
关于php - WHERE 子句上的 MySQL 错误 #1064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6500338/