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