[英]PHP mysqli_real_escape_string() not working inside function
我有一個向數據庫添加日志條目的功能,如下所示:
function doLog($conn, $category, $result, $details){
$category = mysqli_real_escape_string($conn, $category);
$result = mysqli_real_escape_string($conn, $result);
$details = mysqli_real_escape_string($conn, $details);
mysqli_query($conn, "INSERT INTO log (category, result, details) VALUES('$category', '$result', '$details')");
return $details; //for debug
}
echo doLog2($conn, "Test", "Test", "A 'test' entry"); //echo is for debug
一個'test'條目作為一個\\'test \\ '條目被返回/回顯,但是沒有斜杠插入到我的數據庫中。
怎么會這樣?
這工作正常。 反斜杠用於轉義SQL查詢中的引號,以便逐字插入引號字符。 不應同時插入轉義字符\\
。
如果您兩次應用了轉義,您將得到一個轉義的反斜杠,然后是一個轉義的引號,如下所示:
A \\\'test\\\' entry
存儲在數據庫中的將是:
A \'test\' entry
如果您使用參數化語句,那么所有這些操作都將更加簡單。 您不做任何引用或轉義。
function doLog($conn, $category, $result, $details){
$sql = "INSERT INTO log (category, result, details) VALUES (?, ?, ?)";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "sss", $category, $result, $details);
mysqli_stmt_execute($stmt);
return $details; //for debug
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.