mysqli 准备语句删除新行

mysqli prepared statements remove new lines

我一直在使用“标准”mysqli 查询,但决定使用准备好的语句来提高安全性。一切正常,只是在将数据添加到数据库时删除了新行。这是一些查询的示例:

$stmt=mysqli_prepare($GLOBALS["mysqli"], "UPDATE products SET product_description=? WHERE product_id=?");
if ($stmt)
    {
    mysqli_stmt_bind_param($stmt, "si", $product_description, $product_id);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
    }

$product_description 是来自 textarea 的变量(通过 POST 表单提交),它有新行。将数据添加到数据库后,它看起来像:

FIRSTLINE\r\nSECONDLINE

我知道表单或代码本身没有任何问题,因为如果我使用此查询:

mysqli_query($GLOBALS['mysqli'], "UPDATE products SET product_description='$product_description' WHERE product_id='$product_id');

一切正常,数据库中的数据如下所示:

FIRST_LINE

SECOND_LINE

有什么建议吗?

我能够修复它。 mysqli_real_escape_string 函数应用于通过表单提交的所有变量。删除这个单一功能解决了这个问题。

如果有人遇到类似问题,只需查看您的代码并删除 mysqli_real_escape_string 函数 - 它可以很好地处理 "standard" 查询,但会破坏准备好的语句。