PHP PDO停止工作
我在PDO上遇到了一个奇怪的问题。有时它只是不执行SQL。但它的行为就像是这样PHP PDO停止工作,php,mysql,pdo,Php,Mysql,Pdo,我在PDO上遇到了一个奇怪的问题。有时它只是不执行SQL。但它的行为就像是这样 $SQL = 'INSERT INTO beam_stats (beam_id, beam_stat_type, beam_stat_count) VALUES (:BID, :BST, :BSC) ON DUPLICATE KEY UPDATE beam_stat_coun
$SQL = 'INSERT INTO
beam_stats (beam_id, beam_stat_type, beam_stat_count)
VALUES
(:BID, :BST, :BSC)
ON DUPLICATE KEY UPDATE
beam_stat_count = beam_stat_count + VALUES(beam_stat_count)';
$parameters = Array(':BID' => $beamID, ':BST' => $valueName, ':BSC' => $value);
$this->dbCon->prepare_execute($SQL, $parameters);
/**
* Prepares and Executes the provided statement and parameters.
*
* @param string $statement
* @param ARRAY $parameters
* @return mixed database results
*/
public function prepare_execute($statement, $parameters) {
$this->prepare($statement);
return $this->execute($parameters);
}
/**
* Prepares the provided database statement
*
* @author Jonathan Pitcher
*
* @param string $statement
*/
public function prepare($statement) {
$this->sth = $this->db->prepare($statement);
if (!$this->sth) {
error_log(print_r($this->db->errorInfo(), true));
}
}
/**
* Executes the prepared statement in sth using the passed parameters.
*
* @author Jonathan Pitcher
*
* @param ARRAY $parameters
* @return mixed
*/
public function execute($parameters) {
$results = $this->sth->execute($parameters);
$count = $this->sth->rowCount();
error_log($this->sth->queryString);
error_log("Updated $count rows.\n");
if (!$results) {
error_log(print_r($this->sth->errorInfo(), true));
return false;
}
return $results;
}
我把一切都记录下来。因此,当它执行日志时,会打印出发生了什么以及更新了多少行
[Thu Jun 05 10:15:40 2014] [error] [client ] Updating Beam Stat 494 sold_out 1
[Thu Jun 05 10:15:40 2014] [error] [client ] INSERT INTO\n\t\t\t\t\t\tbeam_stats (beam_id, beam_stat_type, beam_stat_count)\n\t\t\t\t\tVALUES\n\t\t\t\t\t\t(:BID, :BST, :BSC)\n\t\t\t\t\tON DUPLICATE KEY UPDATE\n\t\t\t\t\t\tbeam_stat_count = beam_stat_count + VALUES(beam_stat_count)
[Thu Jun 05 10:15:40 2014] [error] [client ] Updated 1 rows.\n
但当我检查数据库时,该行尚未插入
现在,如果我复制SQL和值并手动运行它,它就会工作
如果一个记录已经在那里,它会工作,它会更新总数。但它不会插入记录
更奇怪的是,这个sql是一个在整个站点都使用的函数,它在其他任何地方都可以正常工作。就这一个场景 您的参数数组不正确。它应该是
'BID'
,'BST'
,'BSC'
,也就是说,删除参数数组的冒号:
。错误,不应跳过冒号。从:$sth->execute(数组(“:carries'=>$carries,”:color'=>$color))@serakfalcon这些冒号即使在阵列内也很好。请参阅此PHP.net示例:$sth->execute(数组(':carries'=>$carries,':color'=>$color))
hmm可能是我把它与我通常使用的DBL混淆了它们在执行数组中是可选的,但在查询字符串中是必需的看起来您没有将此数组作为参数发送到execute
方法,您的错误消息表明查询中仍有占位符。您如何执行此语句?beam_stat_count+值(beam_stat_count)有什么意义?但请向我们展示如何执行数组以及如何处理执行。遗憾的是,PDO没有向您展示发送到服务器的实际查询。打印出来的内容是在发送到服务器之前所能看到的最好结果,即$sth->queryStringJonast92。beam_stat_count+值(beam_stat_count)的目的是将字段的值增加传递的量。因此,如果值是15,我通过了35,那么新的值现在将是50