【问题标题】:Can PHP bind a list of numbers in a SQL prepared statement?PHP 可以在 SQL 准备语句中绑定数字列表吗?
【发布时间】:2013-09-26 19:07:48
【问题描述】:

我正在将 Coldfusion 网站转换为 PHP。我有一个查询,它查看逗号分隔的数字列表,看看是否有匹配项,然后做出相应的响应。这是我目前使用的 where 语句。

WHERE (`link_issue_category`.`Category_ID` IN (<CFQUERYPARAM value="#Category_id#" list = "yes">)

如何用 PHP 编写?

【问题讨论】:

  • php?对我来说看起来像一个 mysql 数据库查询
  • 如果你告诉那些了解 PHP 但不了解 ColdFusion 的人,ColdFusion 代码应该做什么会有所帮助。
  • @rid category_id 是一个以逗号分隔的 ID 列表。就像他在问题中所说的那样
  • @MattBusche,所以&lt;CFQUERYPARAM value="#Category_id#" list = "yes"&gt; 是一个...字符串变量,包含... SQL 转义,逗号分隔的...数字列表?
  • @rid 正确。就像说IN (#Category_id#)IN (1,2,3,4)cfqueryparam是用来防止SQL注入的

标签: php coldfusion


【解决方案1】:

CFQUERYPARAM 对值进行一些验证,并在可能的情况下设置绑定参数。假设您已经对其进行了验证/清理,您可能只需将值嵌入到 SQL 中。 list 参数指定这是一个逗号分隔的列表。您应该能够将此列表直接插入到查询中,具体取决于值类型。

"WHERE (`link_issue_category`.`Category_ID` IN ($category_id)";

如果列表中的值是字符串,则可能需要在它们进入查询之前将它们包装在 qoutes 中。

【讨论】:

  • 难道 php 有一些叫做prepared statements 的东西或多或少等同于使用查询参数吗?
【解决方案2】:

FYI CF 只是创建一个新的准备好的语句,? 的数量与幕后列表的长度相同。

因此,如果您想在 PHP 中实现相同的行为,那真的不会那么难。只需动态创建一个新的准备好的语句,并相应地绑定它们。

PHP 预处理语句:http://php.net/manual/en/pdo.prepared-statements.php

但是,您可以只使用正则表达式将值列表验证为数字值和逗号,并将变量用作 SQL 语句的一部分。

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2018-10-15
    • 2012-07-03
    相关资源
    最近更新 更多