Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO INSERT语句出错_Php_Mysql_Pdo - Fatal编程技术网

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 (?,?,?)"

虽然我讨厌这种愚蠢的答案太重复的问题,但系统不工作,将有十几个答案。真棒,这样一个愚蠢的错误,谢谢你的帮助。只要时间允许,我就把它标为正确答案