如何使用mysqli准备的语句安全地更新和检索字符串



我正在使用表单更新网站上显示的数据。这只是文本信息,但会包含撇号和引号。

我认为,使用一个为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。

之后我看到的问题是我对文本进行了双重转义。它是固定的。

感谢所有回应的人!

最新更新