我有一个tag names
数组,我通过POST Method
传递了这些标记名称,数据库中有相应的tag_id
。我想要的是在迭代标记名称数组的同时搜索id,我希望每个查询的结果都存储在一个空数组中。我想我只是误解了什么或什么。
$tags_array = ['shoes','gadgets','fashion','food'];
$tags_array_id = [];
$tags_sql = '';
foreach ($tags_array as &$tag) {
$sql = "SELECT tag_id FROM `tbltag` WHERE tag_name = ".$tag." group by tag_name";
$query = mysqli_query($conn, $sql);
$result = mysqli_fetch_row($query);
$tags_array_id[] = $result[0];
};
请帮助大家,建议高度赞赏。
答案 0 :(得分:2)
基本上类似于:
$sql = "SELECT * FROM `tbltag` WHERE tag_name IN('".implode("','", $tags_array)."')";
最后一条评论:您可能想要搜索tag_id而不是标记名称,因为您可能会在输入中添加这些内容($ _POST / $ _ GET)。正如上面提到的FuzzyTree,您将需要某种类型的ID验证以及某种类型的数据转义,以避免SQL注入。
答案 1 :(得分:1)
改为使用
$tags_array = ['shoes','gadgets','fashion','food'];
$tags = implode("','", $tags_array);
$tags = "'".$tags."'";
$sql = "SELECT tag_id FROM tbltag WHERE tag_name IN ({$tags})";
答案 2 :(得分:0)
问题:你需要&在你的foreach循环?您不是仅使用信息直接修改tags_array吗?
尝试将数字添加到数组中,例如添加$ x,以便在循环时将1条记录添加到数组的1个部分中。
$tags_array = ['shoes','gadgets','fashion','food'];
$tags_array_id = [];
$tags_sql = '';
$x = 0;
foreach ($tags_array as &$tag) {
$sql = "SELECT tag_id FROM `tbltag` WHERE tag_name = ".$tag." group by tag_name";
$query = mysqli_query($conn, $sql);
$result = mysqli_fetch_row($query);
$tags_array_id[$x] = $result[0];
$x++;
};