当前位置: 首页 > 面试题库 >

WHERE IN子句与PDO的绑定参数

越英韶
2023-03-14
问题内容

我的代码:

$myArray = implode($myArray, ',');
$sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)');
$sth->bindParam(':ids', $myArray);
$sth->execute();
$result = $sth->fetch();
echo $sth->rowCount();

始终显示为1的计数,但是当我跳过参数化并仅将变量本身添加到其位置时,我得到了准确的计数。这里发生了什么?


问题答案:

您不能像这样为IN子句绑定参数。$ myArray字符串将仅计为一个值,例如执行以下操作:

SELECT foo FROM bar WHERE ids IN ('1,2,3')

即使有三个以逗号分隔的值,数据库也会将它们作为一个字符串值读取。

您需要以惯用的方式手动将IN列表插入查询中。

'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'

不幸的是没有其他办法。至少现在(是。



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 我可以将数组绑定到IN()条件吗? (21个回答) 2个月前关闭。 我对PDO有一个问题,在困扰了一段时间后,我真的很想得到答案。 举个例子: 我将ID数组绑定到PDO语句,以便在MySQL IN语句中使用。 该数组将说: $ values = array(1,2,3,4,5,6,7,8); 数据库安全变量为 $ products = implode(’

  • 问题内容: 我有这样的查询: 它与PDO和MySQL Workbench完美配合(根据需要返回10个URL)。 但是我试图用PDO 参数化: 返回空数组。 问题答案: 我只是测试了很多案例。我在OS X上使用PHP 5.3.15,并查询MySQL 5.6.12。 如果您进行以下设置,则任何组合均有效: 以下所有工作 :您可以使用an 或字符串;您不需要使用PDO :: PARAM_INT。 您还可

  • 在mySQL查询中,我希望根据WHERE子句中PDO绑定的搜索参数条件选择客户机表的行。类似于 有两种情况:A)搜索参数包含字符串或B)搜索参数为空 在A的情况下,param包含例如一个客户端号'123'。 因此,我使用:,如果客户机在表中,则查询返回客户机123。 在B的情况下,字符串为空。因此我没有使用WHERE子句,查询只是返回表中的所有客户端 我当然可以写一个IF..SELECT查询之外的

  • 问题内容: 我正在使用PDO,是否需要清理GET参数? 我知道我是否比那不是问题。但是我的方式安全吗? 问题答案: 是的,这很安全。和之间的唯一区别是: 一次接受多个参数,而每个参数都必须 允许您指定参数类型,同时将所有内容绑定为字符串 将参数传递给通常是一个方便的快捷方式,它仍然是安全的。

  • 问题内容: 我正在使用PDO来执行一条语句,该语句使用将数组作为其值的子句: 上面的代码工作得很好,但是我的问题是为什么不能: 此代码将返回等于(1)中第一项的项目,但不返回数组(2和3)中的其余项目。 问题答案: PDO不适用于此类情况。您需要动态创建带有问号的字符串并将其插入查询中。 如果查询中还有其他占位符,则可以使用以下方法(代码取自我的PDO教程): 您可以使用函数将所有变量连接到单个数

  • 我想知道使用比有什么好处? 最简单的方法是: 如您所见,我可以将数据绑定到< code>preparedStatement而无需< code>boundStatements。< code>boundStatement在哪里有用?