我正在使用一个表单来更新网站上显示的数据。这只是文本信息,但是将包含撇号和引号。
我认为使用带有针对Update SQL语句和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(); }
答案 0 :(得分:0)
使用“ mysqli_real_escape_string”函数来避免安全风险。
答案 1 :(得分:0)
抱歉打扰人!
准备好的语句按预期工作,我不需要使用mysqli_real_escape_string。
此后我看到的问题是我对文本进行了两次转义。它是固定的。
感谢所有回答!