我正在使用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,但我从未在数据库中看到它。
答案 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 works。 PDO::ERRMODE_SILENT
是默认值 - 这不会抛出异常