문제

I have the following generic snippet of code I use to try and catch mysqli errors and put them into a table I have that would keep a log of the errors. I just put in a generic SQL statement that would error for the example:

$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");
}

The transaction rolls back, but nothing ever gets written to the my_error_log table.

Thanks for the help!

도움이 되었습니까?

해결책

I'd suggest using prepared statements for this. I'd suggest using them anytime you need to concatenate a string into an SQL query string.

$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");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top