PHP PDO停止工作

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

我在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_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