我一直在使用“标准”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
有什么建议吗?
答案 0 :(得分:0)
我能够解决它。 mysqli_real_escape_string函数应用于通过表单提交的所有变量。删除此单个功能解决了这个问题。
如果有人遇到类似的问题,只需查看你的代码并删除mysqli_real_escape_string函数 - 它可以正常使用"标准"查询,但打破准备好的陈述。