php - SELECT 查询不适用于使用准备好的语句的 IN

标签 php mysql prepared-statement

有人可以帮我获取 SELECT 查询 (2)。下面开始工作?

该字符串用于两个 SELECT 语句:

$seller_items = ('6','9','12','13','14','15','16','17','18','19','20','22','23','24','25','26','28','27','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','53','54','55','57','58','59','60','62','63','64','65','61','67','56','69','70','74','73','75','78','80','76','72','95','94','101','102','71','103','2','104','4','81','21','10','11','3','79','5','8','7','97','93','96','98');

(1)。此 SELECT 查询工作正常:

if ($stmt = $mysqli->prepare("SELECT info FROM items WHERE item_id IN $seller_items AND active = ?")){
$stmt->bind_param("s",$active); 

(2)。此 SELECT 查询不起作用:

if ($stmt = $mysqli->prepare("SELECT info FROM items WHERE item_id IN ? AND active = ?")){
$stmt->bind_param("ss",$seller_items,$active);

我认为将变量放在 SELECT 查询本身中可能会破坏准备好的语句的目的。

我可以让 IN 谓词与未准备的语句一起正常工作。这是我遇到问题的准备好的声明。

提前谢谢您。

最佳答案

正如 @Dai 提到的,IN 不能仅用一个变量进行参数化。当然可以通过一系列参数来完成,但参数的数量是固定的。准备语句的想法是,值的插入需要相同的位置、相同的参数数量和相同的类型。

如果 IN 内部的参数数量是固定的,则可以使用以下方法:

$a=[1,2,3];
$s=$mysqli->prepare("SELECT id FROM users WHERE role_id IN (?,?,?)");
$s->bind_param('iii',$a[0],$a[1],$a[2]);
$s->execute();
$s->bind_result($id);
$c=[];
while($s->fetch()){
  $c[]=$id;
}
var_dump($c);

也许这不是您正在寻找的答案,但如果不知道变量的数量,最好将内爆数组字符串插入原始 SQL 命令中。

$a=[1,2,3];
$b="('".implode("','",$a)."')";
$s=$mysqli->prepare("SELECT id FROM users WHERE role_id IN {$b}");
$s->execute();
$s->bind_result($id);
$c=[];
while($s->fetch()){
  $c[]=$id;
}
var_dump($c);

关于php - SELECT 查询不适用于使用准备好的语句的 IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978020/

相关文章:

php - 出现错误:CodeIgniter\Database\BaseResult::getResult in CodeIgniter

php exec()通过cmd行成功运行Rscript但无法通过浏览器运行

php - 使用 php、mysql 和查询自动完成

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

php - mysqli_fetch_assoc()期望参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 准备好的语句帮助,63/63 参数失败,参数数量不匹配

PHP/MongoDB : update a value in an array

mysql索引似乎在大表中失败

python - 如何在 Python 中用求和编写包含许多 AND 和 OR 的查询?

mysql - Laravel 搜索关系字段值 + 关系字段值等于字段值