簡體   English   中英

PHP mysqli_real_escape_string()在函數內部不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM