我将在prepare语句中使用带有参数的“ IN”运算符 但是我做不到
$hotel_list = "SELECT DISTINCT h.hotel_id, h.hotel_name, h.hotel_address, h.hotel_image
FROM type_feture tf
JOIN type t ON t.type_id = tf.type_id
JOIN hotel h ON h.hotel_id=t.hotel_id
WHERE tf.feture_id IN ?
AND h.hotel_city_id=?
GROUP BY tf.type_id, h.hotel_id, h.hotel_name, h.hotel_address HAVING COUNT(tf.type_id)>=?";
$result = $dbca->prepare($hotel_list);
$result->bind_param("sii", $feture,$city_ide,$cnt_type);
$feture=(string)$finish;
$city_ide = (int)$hotel_city_id;
$cnt_type=(int)$cn;
$result->execute();
$res = $result->get_result();
while ($obj = $res->fetch_object()) {
$hotels[] = $obj;
}
答案 0 :(得分:0)
由于这是一项设计要求,因此必须使用IN
运算符和准备好的语句,因此需要一种将(value 1, value 2, value 3, ... value n)
的PHP数组转换为SQL数组(value 1, value 2, value 3, ... value n)
的方法。您将需要一个中间步骤,因为如果没有某种功能或循环的帮助,PHP对象将无法直接转换为SQL。
您的思考过程应该是:这两个变量有什么共同点?答案:它们都是列表,都可以用字符串表示。为了解决您的问题,您需要将PHP列表转换为逗号分隔的字符串,转换为SQL数组,然后在SQL查询中检查指定的列在该数组中是否有值。
您只需对代码进行两项更改即可完成此操作:
1)创建一个变量$feature_ids_str
,并使其成为包含功能部件ID的任何数组的逗号分隔字符串版本(根据对问题的评论,如果您给我们更多代码,这确实会有所帮助解释其中一些变量的来源)。值$feature_ids_str
的示例为"1,5,3,7,82,4"
。
2)如下修改查询:... WHERE tf.feture_id IN STRING_SPLIT(?, ',') ...
[feture_id sic] ,当然还要相应地更新$result->bind_param()
函数。
此外,我认为您在拼写“功能”。