有人可以帮我获取 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/