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" 查询,但会破坏准备好的语句。
我一直在使用“标准”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" 查询,但会破坏准备好的语句。