我有查询:
$stmt = $dbh->prepare("INSERT INTO `tap_sajobs` (
`ja_jid`,
`ja_reference`,
`ja_datePosted`,
`ja_dateUpdated`,
`ja_title`,
`ja_summary`,
`ja_description`,
`ja_location`,
`ja_email`,
`ja_url`,
`ja_salaryperiod`,
`ja_salarymin`,
`ja_salarymax`
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
值由数组$ja
填充。 我可以使用此:
$query = "INSERT INTO `tap_sajobs` (`ja_jid`,`ja_reference`,`ja_datePosted`,`ja_dateUpdated`,`ja_title`,`ja_summary`,`ja_description`,`ja_location`,`ja_email`,`ja_url`,`ja_salaryperiod`,`ja_salarymin`,`ja_salarymax`)
VALUES (".implode(",",$ja).");";
echo $query;
其中输出以下内容:
INSERT INTO `tap_sajobs` (`ja_jid`,`ja_reference`,`ja_datePosted`,`ja_dateUpdated`,`ja_title`,`ja_summary`,`ja_description`,`ja_location`,`ja_email`,`ja_url`,`ja_salaryperiod`,`ja_salarymin`,`ja_salarymax`)
VALUES ('2049216', '2091046', '2015-07-23', '2015-08-20T06:49:30Z', 'Consultant', 'Will consider a graduate or a fully qualified fellow.', 'Test', 'No Location Set', 'test@foo.com', 'https://test.foo.com/3207/2049216/vh6zpeigfx6edggjrhshwulvvy?site=live', '0', '0', '0')
执行查询的实际代码是:
if(!$stmt->execute($ja)) {
print_r($stmt->errorInfo());
print_r($dbh->errorInfo());
exit("Error communicating with database.");
}
通过代码执行查询时,我看到错误"错误与数据库进行通信"和$dbh->errorInfo()
输出:
Array ( [0] => 00000 [1] => [2] => ) 1
但是,执行PHP代码直接输入的查询到phpMyAdmin执行没有问题。
这个问题的根源是什么,或者如何找到它?
答案 0 :(得分:1)
SQLSTATE
代码00000
告诉您上次执行的语句中没有发生错误。如果没有行受sql查询影响,则以下行将返回0
。
$stmt->execute($ja);
因此,即使没有错误,您也会进入if
区域,因为!$stmt->execute($ja)
将等于1
。因此,为了捕捉错误,我认为最好使用,
$result = $stmt->execute($ja);
if($result == false) {
// put the error handling logic here.
}
答案 1 :(得分:0)
如果
$query = "INSERT INTO `tap_sajobs` (`ja_jid`, `ja_reference`, `ja_datePosted`, `ja_dateUpdated`, `ja_title`, `ja_summary`, `ja_description`, `ja_location`, `ja_email`, `ja_url`, `ja_salaryperiod`, `ja_salarymin`, `ja_salarymax`)
VALUES (".implode(",", $ja).");";
echo $query;
产量
INSERT INTO `tap_sajobs` (`ja_jid`, `ja_reference`, `ja_datePosted`, `ja_dateUpdated`, `ja_title`, `ja_summary`, `ja_description`, `ja_location`, `ja_email`, `ja_url`, `ja_salaryperiod`, `ja_salarymin`, `ja_salarymax`)
VALUES ('2049216', '2091046', '2015-07-23', '2015-08-20T06:49:30Z', 'Consultant', 'Will consider a graduate or a fully qualified fellow.', 'Test', 'No Location Set', 'test@foo.com', 'https://test.foo.com/3207/2049216/vh6zpeigfx6edggjrhshwulvvy?site=live', '0', '0', '0')
然后似乎$ja
中的所有值都已经转义,因此当您使用数组准备语句时,它们会被双重转义,因此会出错。
答案 2 :(得分:0)
我认为您必须删除表格上的引号
'tap_sajobs'
试试这个
tap_sajobs
答案 3 :(得分:-1)
您正在执行" ja",而不是"查询":
if(!$stmt->execute($ja))
执行查询:
if(!$stmt->execute($query))