我正在使用表单更新网站上显示的数据。这只是文本信息,但会包含撇号和引号。
我认为,使用一个为UpdateSQL语句和Select语句都带参数的已准备好的语句,将分别自动转义和取消转义特殊字符。这似乎没有发生。由于撇号导致语句格式不正确,因此准备好的语句仍然会出现撇号。
在更新之前,我在字符串上使用mysqli_real_escape_string来解决这个问题,但当我使用另一个准备好的语句(用一个参数选择(获得字符串时,转义的撇号会显示在html页面的文本中(例如:/'hello/'而不是'hello'(。
所以我用条纹斜线。这是有效的,但我认为mysqli准备的语句是为您做这件事的。有什么想法吗?
更新:
$mysqli = new mysqli($servername, $username, $password, $dbname);
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$sql = "UPDATE table SET mycol= ? WHERE myparam= ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ss', $mycol, $myparam);
if (!$stmt->execute()) {
echo "Error updating record: " . $stmt->error;
}
获取:
$mysqli = new mysqli($servername, $username, $password, $dbname);
if($mysqli->connect_error)
{
die("$mysqli->connect_errno: $mysqli->connect_error");
}
$sql= "Select * From table Where myvar= ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $myparam);
$stmt->execute();
$stmt_result = $stmt->get_result();
if ($stmt_result->num_rows>0) {
$row = $stmt_result->fetch_assoc(); }
使用"mysqli_real_escape_string"函数可以避免安全风险。
很抱歉打扰大家!
准备好的语句按预期工作,我不需要使用mysqli_real_escape_string。
之后我看到的问题是我对文本进行了双重转义。它是固定的。
感谢所有回应的人!