php mysqli - 回滚后插入语句以记录错误不起作用

时间:2014-01-06 16:38:41

标签: php insert mysqli rollback

我有以下通用的代码片段,我用它来尝试捕获mysqli错误,并将它们放入我有的表中,以便记录错误。我只是输入了一个通用的SQL语句,该语句会对示例产生错误:

$sql = "UPDATE table_x SET mycol = 1/0";

if(!$conn->query($sql))
{
$err = $conn->error;
$conn->rollback();
$conn->query("INSERT INTO my_error_log (page_name, error_text, time_stamp) VALUES ('" . basename(__FILE__) . " Line:" . __LINE__ . "', '$err', NOW())");
$conn->commit();
die("Error occurred");
}

事务回滚,但什么都没有写入my_error_log表。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我建议使用预备语句。我建议你随时使用它们你需要将一个字符串连接成一个SQL查询字符串。

$sql = "UPDATE table_x SET mycol = 1/0";

if(!$conn->query($sql)){
    $err = $conn->error;
    $conn->rollback();

    $stmt = $conn->prepare('INSERT INTO my_error_log (page_name, error_text, time_stamp) VALUES (?,?,NOW())')
    $stmt->bind_param('ss', basename(__FILE__) . " Line:" . __LINE__, $err);
    $stmt->execute();

    $conn->commit();
    die("Error occurred");
}