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

MySQL IN语句的PDO绑定值[重复]

欧阳君浩
2023-03-14
问题内容

这个问题已经在这里有了答案

我可以将数组绑定到IN()条件吗? (21个回答)

2个月前关闭。

我对PDO有一个问题,在困扰了一段时间后,我真的很想得到答案。

举个例子:

我将ID数组绑定到PDO语句,以便在MySQL IN语句中使用。

该数组将说: $ values = array(1,2,3,4,5,6,7,8);

数据库安全变量为 $ products = implode(’,’$ values);

因此, $ products 将是一个 STRING ,其值为: ‘1,2,3,4,5,6,7,8’

该语句如下所示:

SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (:products)

当然, $ products 将被绑定为 :products

但是,在编译该语句并绑定值时,它实际上看起来像这样:

SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN ('1,2,3,4,5,6,7,8')

问题是它正在将IN语句中的所有内容作为单个字符串执行,因为我已经将其准备为逗号分隔的值以绑定到该语句。

我真正需要的是:

SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (1,2,3,4,5,6,7,8)

我真正做到这一点的唯一方法是将值放置在字符串本身内而不绑定它们,但是我知道一定有一种更简单的方法可以做到这一点。


问题答案:

这与在此问题中提出的问题是一样的:
我可以将数组绑定到IN()条件吗?

答案是,对于in子句中的可变大小列表,您需要自己构造查询。

但是,
您可以使用带引号的逗号分隔列表,使用find_in_set,尽管对于大型数据集,这将对性能产生重大影响,因为表中的每个值都必须转换为char类型。

例如:

select users.id
from users
join products
on products.user_id = users.id
where find_in_set(cast(products.id as char), :products)

或者,作为第三个选项,
您可以创建一个用户定义的函数,该函数可以为您拆分以逗号分隔的列表(请参阅http://www.slickdev.com/2008/09/15/mysql-
query-real-values- from-delimiter-separated-string-ids
/)。这可能是这三个中的最佳选择,尤其是如果您有很多依赖in(...)子句的查询时。



 类似资料:
  • 问题内容: 有没有一种简单的方法就可以在PDO中绑定多个值而无需重新分配?看下面的代码: 在这里,我以重复的方式将值绑定了4次。那么,有没有一种简单的方法可以在PDO中绑定多个值? 问题答案: 只要您可以将值视为(字符串),就可以始终将其绑定在参数中。 您可以像任何数组一样使用传递的数组:

  • 问题内容: 我的代码: 始终显示为1的计数,但是当我跳过参数化并仅将变量本身添加到其位置时,我得到了准确的计数。这里发生了什么? 问题答案: 您不能像这样为IN子句绑定参数。$ myArray字符串将仅计为一个值,例如执行以下操作: 即使有三个以逗号分隔的值,数据库也会将它们作为一个字符串值读取。 您需要以惯用的方式手动将IN列表插入查询中。 不幸的是没有其他办法。至少现在(是。

  • 问题内容: 这个问题已经在这里有了答案 : 我的PDO声明无效 (1个答案) 2年前关闭。 我正在尝试使用PDO准备好的语句为MySQL数据库上的查询创建正确的错误处理。我希望程序在检测到准备好的语句过程中出现错误时退出。利用PDO准备好的语句过程中的每个步骤都会在失败时返回的事实,我将这种令人讨厌的技巧归纳为: 通过执行以下操作: 两件事情。首先,这是非常冗长而愚蠢的。肯定有更好的办法。显然,我

  • 问题内容: 今天有人告诉我,我确实应该在应用程序中使用PDO和准备好的语句。在我了解好处的同时,我也在努力了解如何将其实现到我的工作流程中。除了它使代码更简洁外,我是否应该有一个特定的数据库类来容纳所有准备好的语句,还是应该在每次运行查询时都创建一个?我发现很难理解何时应使用标准PDO查询以及何时应使用准备好的语句。任何示例,技巧或教程链接将不胜感激。 问题答案: pdo :: prepare()

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

  • 问题内容: 这个问题已经在这里有了答案 : 我可以使用PDO准备好的语句来绑定标识符(表或字段名)或语法关键字吗? (1个答案) 去年关闭。 是否可以在准备好的MySQL语句中将列名作为参数传递?请看以下示例: PDO 在每个参数周围添加,因此上面的中线变为: 哪个MySQL不喜欢。有没有一种方法可以在PDO语句中包含字段名的参数,并接受它们? 否则,我猜我将不得不编写一些不同的PDO语句,具体取