0

我正在将 PDO 与 MYSQL 一起使用。有时当代码执行插入语句时。但它不去。在过去的 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));
    }
}

我已经进行了适当的调试,并且所有内容都正确地传递给了函数。

这是执行功能

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,但我从未在数据库中看到它。

4

1 回答 1

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()在查看文档失败时返回 false没有PDOException抛出PDO::exec()- 如果您查看文档PDO::prepare()明确说明

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

这不存在于PDO::exec()

正如@jeroen 在评论中所指出的那样——您需要查看 PDO 中的错误处理是如何设置的——阅读这篇文章以了解使用异常的工作原理PDO::ERRMODE_SILENT是默认值 - 这不会抛出异常

于 2012-04-10T14:13:08.140 回答