pdo并不总是执行查询

时间:2012-04-10 14:04:46

标签: php mysql class pdo

我正在使用PDO和MYSQL。有时当代码执行insert语句时。它不会发生。这段代码在过去的8个月里一直在我的公司工作,并且现在某些插入语句失败了。

public static function update($id,$table,$fields,$output=false,$pool = false){  

    $sql = "";

    if($pool){
        foreach($fields as $fields_single){
            $fields_id = 0;
            if(isset($fields_single["id"])) $fields_id=$fields_single["id"];
            $sql .= self::update_sql($fields_id,$table,$fields_single,$output)."; ";
        }

        return max($id,self::exec($sql));
    }else{
        $sql = self::update_sql($id,$table,$fields,$output);

        return max($id,self::exec($sql));
    }
}

我已经完成了正确的调试,所有内容都正确地传递给了函数。

这里是exec函数

public static function exec($query,$output=false){
    self::initialise();
    self::$query_count++;
    try{
        if($output) echo $query."<br /><br />";
        self::$db_connection->exec($query);
        return self::$db_connection->lastInsertId();
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
}

PDOException没有抛出任何错误,它每天处理1000个sql语句。任何想法或猜测为什么它不会处理给它的插入语句,将不胜感激。

谢谢。

此外,当我执行lastInsertid()时,我获得了新的ID,但我从未在数据库中看到它。

1 个答案:

答案 0 :(得分:0)

替换

try{
    if($output) echo $query."<br /><br />";
    self::$db_connection->exec($query);
    return self::$db_connection->lastInsertId();
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

if($output) echo $query."<br /><br />";
$count = self::$db_connection->exec($query);
if (!$count) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
return self::$db_connection->lastInsertId();

PDO::exec() returns false on failure查看文档PDOException引发了PDO::exec() - 如果您查看PDO::prepare()的文档,则会明确说明

  

PDO :: prepare()返回FALSE或发出PDOException

这不存在于PDO::exec()

如@jeroen在评论中所述 - 您需要了解如何设置PDO中的错误处理 - read this on how using exceptions worksPDO::ERRMODE_SILENT是默认值 - 这不会抛出异常