首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mysqli prepared语句安全地更新和检索字符串?

如何使用mysqli prepared语句安全地更新和检索字符串?
EN

Stack Overflow用户
提问于 2018-10-30 13:06:57
回答 2查看 28关注 0票数 0

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

我认为使用带有Update SQL语句和Select语句参数的预准备语句将分别自动转义和取消转义特殊字符。这似乎并没有发生。由于撇号导致语句格式不正确,所以准备好的语句仍然会与撇号打乱。

我在更新字符串之前使用mysqli_real_escape_string解决了这个问题,但是当我使用另一个准备好的语句(带有一个参数的select )获取字符串时,转义的撇号显示在html页面的文本中(例如: /'hello/‘而不是'hello’)。

所以我使用了带斜杠。这是可行的,但我认为mysqli为您准备的语句可以做到这一点。有什么想法吗?

更新:

代码语言:javascript
复制
$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;                                  
}

获取:

代码语言:javascript
复制
$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();    }
EN

回答 2

Stack Overflow用户

发布于 2018-10-30 13:16:20

使用mysqli_real_escape_string函数,避免安全风险。

票数 0
EN

Stack Overflow用户

发布于 2018-10-30 14:00:14

很抱歉打扰大家!

准备好的语句可以正常工作,我不需要使用mysqli_real_escape_string。

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

感谢每一个回复的人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53057760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档