我有一个向我的数据库添加日志条目的函数,如下所示:
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
A'测试'输入作为 A \' test \'返回/回显条目,但插入到我的数据库中,没有斜杠。
这怎么可能?
答案 0 :(得分:2)
这是正常的。反斜杠用于转义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
}