2014-01-06 181 views
0

我有以下代碼的通用代碼段,用於嘗試並捕獲mysqli錯誤,並將它們放入表中我將保留錯誤日誌。我只是把一個普通的SQL語句,將錯誤的例子:php mysqli - 回滾後插入語句以記錄錯誤不起作用

$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表。

感謝您的幫助!

+0

您在該代碼中容易受到SQL注入攻擊,這意味着'$ err'可能包含'''並且正在殺死插入。 –

回答

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