【问题标题】:PHP insert ' into SQL [duplicate]PHP将'插入SQL [重复]
【发布时间】:2016-08-17 13:10:41
【问题描述】:
$type_of_poker = "hold'em no limit";
$sql = "INSERT INTO hands (type_of_poker) VALUES ('$type_of_poker')";

我试图将hold'em no limit 放入 SQL 数据库,但它不会让我 使用' 我无法上传holdem no limit 来获取一长串必须做的事情 与我的其余代码。

【问题讨论】:

  • 我很困惑为什么这被标记为 SQL 注入问题的重复项。对我来说,这显然是在寻求一种在不破坏他的 SQL 语句的情况下编写hold'em 的方法......
  • 你迫切需要阅读proper escaping methods,如果可以的话,应该使用prepared statements
  • @tadman $type_of_poker = "hold''em no limit"; 会是正确的解决方案吗?我读到这是在 SQL 中转义单引号的方法,我还没有读过其他方法,不确定 \' 是否可行,因为它也可能被视为文本。
  • @Webeng 您不必担心如何逃避事情。相信数据库驱动程序会为您完成。在这种情况下,解决方案一如既往地是准备好的语句。它们意味着您不必猜测该怎么做。
  • @tadman 等等...如果我准备语句并绑定参数$type_of_poker = "hold'em no limit" 那么我什至不需要转义撇号?

标签: php mysql


【解决方案1】:

与其尝试逃避撇号,不如使用准备好的语句和绑定参数更好的做法,这也可以解决您的问题。它解决了您的问题,因为您不需要转义撇号 ('):

$type_of_poker = "hold'em no limit";

//binding the parameters to your sql statement
$sql = "INSERT INTO hands (type_of_poker) VALUES (:type_of_poker)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':type_of_poker',$type_of_poker);
$stmt->execute();

如果这对你有用,请告诉我! :)

【讨论】:

  • @Federico 我已经修改了我的答案。这是逃避撇号的正确方法还是您会推荐更好的方法?
  • @Federico 添加了对 sql 注入的预防。我现在的回答是否合适,或者您认为缺少什么?当我有机会时,我总是乐于学习
  • 这应该在 PDO 中工作,我认为这是从这里开始的最佳方式。
  • @tadman 太棒了,感谢您的意见
猜你喜欢
  • 2017-08-26
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2014-03-03
  • 2012-08-24
  • 1970-01-01
  • 2016-11-06
相关资源
最近更新 更多