使用For循环从数组中搜索MySql中的Id

时间:2016-02-10 18:21:58

标签: php mysql sql for-loop

我有一个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];
};

请帮助大家,建议高度赞赏。

3 个答案:

答案 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++;
};