Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备好的语句,其中值位于数组中_Php_Mysql_Prepared Statement - Fatal编程技术网

Php 准备好的语句,其中值位于数组中

Php 准备好的语句,其中值位于数组中,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,在php页面中,我有一个数组,类似于: $category = array(16, 22, 23); 然后我用一条准备好的语句进行数据库查询。我希望获得字段类别包含$category数组中的一个值,并且price低于变量$price中存储的值的所有行 在其他人中,我阅读了问题的答案,并尝试使用find_in_set,正如在那里和其他很多地方所描述的,但不知何故,我无法在准备好的声明中使用它。我试过这个: /* database connection "$db" is established

在php页面中,我有一个数组,类似于:

$category = array(16, 22, 23);
然后我用一条准备好的语句进行数据库查询。我希望获得字段类别包含$category数组中的一个值,并且price低于变量$price中存储的值的所有行

在其他人中,我阅读了问题的答案,并尝试使用find_in_set,正如在那里和其他很多地方所描述的,但不知何故,我无法在准备好的声明中使用它。我试过这个:

/*  database connection "$db" is established beforehand and works  */

if($ps = $db->prepare("
   SELECT id, product, category, price 
   FROM products
   WHERE price <= ? and find_in_set(?, category)
   ORDER BY id") {
     $ps->bind_param("ds", $price, $category); 
     $ps->execute();
     $ps->bind_result($id, $name, $cat, $pr);
     while($ps->fetch()) {
       /* ...  echo the results .....  */
     }
    $ps->free_result();
    $ps->close();
 }
但是我得到了一个空的结果

如果我尝试在bind_param行中使用dd或di而不是ds,我会得到结果,但结果是错误的——我会得到类别为1的所有行

我还试着在中使用category?而不是在集合?中查找类别,但这也不起作用

我该怎么做才能让它工作?感谢您的帮助

两个问题:

列表应作为第二个参数传递给,因此应为:

find_in_set(category, ?)
该参数的类型应为字符串逗号分隔值。因此,首先使用以下命令将数组转换为这样的字符串:

代码:

两个问题:

列表应作为第二个参数传递给,因此应为:

find_in_set(category, ?)
该参数的类型应为字符串逗号分隔值。因此,首先使用以下命令将数组转换为这样的字符串:

代码:


如果要查找$category属于某个集合的值,请尝试在中使用。请注意,不能像上面那样将数组传递到字符串中

另外,不要忘记使用以下命令将数组转换为CSV字符串


如果要查找$category属于某个集合的值,请尝试在中使用。请注意,不能像上面那样将数组传递到字符串中

另外,不要忘记使用以下命令将数组转换为CSV字符串


如果我尝试同样的案例,那么我可能会这样做

SELECT id, product, category, price 
 FROM products
WHERE category = '16' || category = '22' || category = '23' and price < $price` 
我假设$category数组变量是固定的,它不是动态附加值

我只回答了你的问题的一部分。我希望您有php编码约定的想法,而不是将整个语句放在if语句中


如果还有什么要问的,请继续

如果我尝试同样的案例,那么我可能会这样做

SELECT id, product, category, price 
 FROM products
WHERE category = '16' || category = '22' || category = '23' and price < $price` 
我假设$category数组变量是固定的,它不是动态附加值

我只回答了你的问题的一部分。我希望您有php编码约定的想法,而不是将整个语句放在if语句中


如果还有什么要问的,请继续

听起来很像。听起来很像。什么是| |?对于任何给定的数组$category,它是如何工作的?先生,| |相当于或,我可能在上面提到过,我假设如果他有有限的数组值,如果他的数组动态增长,那么他可能必须按照你的方式,对第一点来说是真的,除非设置为它意味着字符串串接,这基本上就是我在比较两个以上的值之前所做的。但是随着越来越多的值变得越来越复杂,另外,我的数组现在有不同数量的值,所以我不能使用它。什么是| |?对于任何给定的数组$category,它是如何工作的?先生,| |相当于或,我可能在上面提到过,我假设如果他有有限的数组值,如果他的数组动态增长,那么他可能必须按照你的方式,对第一点来说是真的,除非设置为它意味着字符串串接,这基本上就是我在比较两个以上的值之前所做的。但是随着越来越多的值变得越来越复杂,另外,我的数组现在有不同数量的值,所以我不能使用它。非常感谢你的回答-非常有效,真的帮助了我!非常感谢你的回答-非常有效,真的帮助了我!Hmm-只返回字符串中第一个值的行。但是@trincot描述的方式对我来说很有效,所以我已经准备好了。不过,感谢您抽出时间回答@Johannes我注意到上面代码中的一个错误,在中之前省略了类别。我还经常显示上面的结果。这是一个让人们帮助你的好工具。不确定您如何只得到一个结果:Hmm-只返回字符串中第一个值的行。但是@trincot描述的方式对我来说很有效,所以我已经准备好了。不过,感谢您抽出时间回答@Johannes我注意到上面代码中的一个错误,在中之前省略了类别。我还经常显示上面的结果。这是一个让人们帮助你的好工具。不确定您如何只得到一个结果:
SELECT id, product, category, price 
 FROM products
WHERE category = '16' || category = '22' || category = '23' and price < $price`