我一直盯着这个陈述及其错误信息大约半个小时而不能看出它有什么问题。
以下是我的发言:
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
从异常中可以看出,我试图插入数据库的三个值在运行时出现(否则它们不会在异常中显示)
我尝试过的事情:
我在代码中使用$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。
我真的很感激任何有关其他事情的建议。
答案 0 :(得分:2)
'from'是一个关键词,你需要将它包含在反引号中
`from`
'to'也是一个关键字
注意:此问题与PDO无关。在开始动态构建之前,开发人员应该在mysql客户端中测试他们的查询。
答案 1 :(得分:0)
From是SQL的保留字,所以如果你想使用它,你必须使用前后滴答。
INSERT INTO dashboardsearchdates (userID, `from`, to) VALUES (?,?,?)"