如果名称中有撇号,如何在表中搜索名称?
如果我在名字里加个撇号 Ender's Game
在我的搜索框中,它给出了一个错误。
我已经尝试了stackoverflow上提供的解决方案,但无法解决此问题。
这是我的密码:
$string1 = $_GET['name'];
$quer = "SELECT * FROM info WHERE name = '$string1'";
$q = mysqli_query($conn, $quer);
如果有撇号 $_GET['name']
,将显示一个错误。
我怎样才能解决这个问题?
2条答案
按热度按时间5rgfhyps1#
最好的实践是使用预先准备好的语句来确保查询的安全性和可靠性。
对于您的情况,我推荐以下代码片段,它不仅安全地执行
SELECT
查询,但也在整个过程中提供信息丰富的诊断/调试检查点,并允许您处理由多维关联数组表示的结果集。重要的是要注意
$stmt->bind_result($result)
(如zenexer的回答)不会起作用(生成$result = NULL
)如果info
表包含多个列(我假设它将与一个列一起工作,但我没有测试);它将生成一个警告,因为从SELECT *
以及指定变量的数量。警告:mysqli_stmt::bind_result():bind变量的数目与prepared语句中的字段数目不匹配
如果您想享受显式绑定结果变量的好处,应该在
SELECT
像这样的条款:z3yyvxxp2#
这种形式的代码容易受到sql注入的攻击。改用mysqli::prepare:
如果您正在修改遗留的、不安全的代码,那么使用mysqli\u real\u escape\u string可能会更快。这应该是保留作为最后手段,但它在那里,如果你需要它,它比正则表达式更好。