Php PDO INSERT语句出错
我已经盯着这个语句和它的错误信息看了大约半个小时,却看不出它到底出了什么问题 以下是我的声明:Php PDO INSERT语句出错,php,mysql,pdo,Php,Mysql,Pdo,我已经盯着这个语句和它的错误信息看了大约半个小时,却看不出它到底出了什么问题 以下是我的声明: try{ $stmt = $conn->prepare("INSERT INTO dashboardsearchdates (userID, from, to) VALUES (?,?,?)"); $result = $stmt->execute(array($userID, $frmFrom, $frmTo)); } catch(PDOException $e){
try{
$stmt = $conn->prepare("INSERT INTO dashboardsearchdates (userID, from, to) VALUES (?,?,?)");
$result = $stmt->execute(array($userID, $frmFrom, $frmTo));
}
catch(PDOException $e){
echo 'ERROR: ' . $e->getMessage();
$queryString = $stmt->queryString;
$page = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
mail(ADMIN_EMAIL, 'SQL ERROR: ' . $page, 'Error Page: ' . $page . ' // Error: ' . $e->getMessage() . ' // Query String: ' . $queryString);
}
这是我试图插入值的表结构:
Table structure for table `dashboardsearchdates`
--
CREATE TABLE IF NOT EXISTS `dashboardsearchdates` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(11) NOT NULL,
`from` datetime NOT NULL,
`to` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
以下是我看到的一个例外:
ERROR: SQLSTATE[42000]: Syntax error or access violation: 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 'from, to) VALUES ('9','2012-12-12','2013-01-01')' at line 1
从异常中可以看到,我试图插入到DB中的三个值在运行时存在(否则它们不会显示在异常中)
我尝试过的事情:
在代码中,我还有其他使用$conn
的查询,因此我知道$conn
存在并且正在工作
我将声明改写如下:
$stmt = $conn->prepare("INSERT INTO dashboardsearchdates (userID, from, to) VALUES (:userID,:from,:to)");
$stmt->bindParam(':userID', $userID);
$stmt->bindParam(':from', $frmFrom);
$stmt->bindParam(':to', $frmTo);
$result = $stmt->execute();
我尝试了在表名、所有字段名、仅整数字段名和仅日期字段周围使用反引号。。所有这些都带有上面显示的相同错误消息——据我所知,SQL的构造并没有什么问题
我真的很感激你能给我提些其他的建议 “from”是一个关键字,您需要将它括在背景符号中
`from`
“to”也是一个关键字
注意:此问题与PDO无关。开发人员在开始动态构建mysql客户端之前,应该在mysql客户端中测试他们的查询。From是SQL的保留字,因此如果您想使用它,必须在back ticks前后使用
INSERT INTO dashboardsearchdates (userID, `from`, to) VALUES (?,?,?)"
虽然我讨厌这种愚蠢的答案太重复的问题,但系统不工作,将有十几个答案。真棒,这样一个愚蠢的错误,谢谢你的帮助。只要时间允许,我就把它标为正确答案