【问题标题】:php mysqli - insert statement after rollback to log errors not workingphp mysqli - 回滚后插入语句以记录错误不起作用
【发布时间】:2014-01-06 16:38:41
【问题描述】:

我有以下通用的 sn-p 代码,我用它来尝试捕获 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 表。

感谢您的帮助!

【问题讨论】:

  • 您在该代码中容易受到 SQL 注入攻击,这意味着 $err 可能包含 ' 并且正在杀死插入。

标签: php insert mysqli rollback


【解决方案1】:

我建议为此使用准备好的语句。我建议随时使用它们,您需要将一个字符串连接成一个 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");
}

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2013-03-24
    • 2017-09-20
    • 2012-05-05
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多