Php 使用for循环从数组中搜索MySql中的Id
我有一个通过Php 使用for循环从数组中搜索MySql中的Id,php,mysql,sql,for-loop,Php,Mysql,Sql,For Loop,我有一个通过POST方法传递的标记名数组,这些标记名在数据库中有相应的tag\u id。我只想在迭代标记名数组时搜索id,并希望每个查询的结果存储在一个空数组中。我想我只是误解了什么 $tags_array = ['shoes','gadgets','fashion','food']; $tags_array_id = []; $tags_sql = ''; foreach ($tags_array as &$tag) { $sql = "SELECT tag_id FROM
POST方法传递的标记名数组
,这些标记名在数据库中有相应的tag\u 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];
};
请帮助大家,我们非常感谢你们的建议。基本上是这样的:
$sql = "SELECT * FROM `tbltag` WHERE tag_name IN('".implode("','", $tags_array)."')";
最后一条评论:您可能希望搜索标记id而不是标记名,因为您的输入中可能有这些标记($\u POST/$\u GET)。正如FuzzyTree上面提到的,您需要某种类型的ID验证和某种类型的数据转义进入查询,以避免SQL注入。基本上类似于:
$sql = "SELECT * FROM `tbltag` WHERE tag_name IN('".implode("','", $tags_array)."')";
最后一条评论:您可能希望搜索标记id而不是标记名,因为您的输入中可能有这些标记($\u POST/$\u GET)。正如上面提到的FuzzyTree,您需要某种类型的ID验证和某种类型的数据转义进入查询,以避免SQL注入。使用这种方法
$tags_array = ['shoes','gadgets','fashion','food'];
$tags = implode("','", $tags_array);
$tags = "'".$tags."'";
$sql = "SELECT tag_id FROM tbltag WHERE tag_name IN ({$tags})";
用这个代替
$tags_array = ['shoes','gadgets','fashion','food'];
$tags = implode("','", $tags_array);
$tags = "'".$tags."'";
$sql = "SELECT tag_id FROM tbltag WHERE tag_name IN ({$tags})";
问题:在foreach循环中需要&吗?您不是仅仅使用这些信息直接修改标记数组吗
正在尝试将数字添加到数组中,例如添加$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++;
};
问题:在foreach循环中需要&吗?您不是仅仅使用这些信息直接修改标记数组吗
正在尝试将数字添加到数组中,例如添加$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++;
};
我的建议是运行一个查询,在
中使用sql关键字,然后循环查询结果。感谢您的建议:)我没有看到您在那里使用的$\u POST数据。您可能想查看PHP的内爆函数。此外,您可能应该使用一个查询。查看MySQL的IN()函数。您的查询没有运行,因为没有引用$tag
。如果$tags\u array
来自用户输入,那么您很容易受到sql注入的攻击,我只需将问题材料上的$tags\u array
设置为静态,因为它是从db获取的。有许多值得一提。但是,顺便说一句,我的建议是运行一个查询,在
中使用sql关键字,然后循环查询结果。我会尝试的,先生。感谢您的建议:)我没有看到您在那里使用的$\u POST数据。您可能想查看PHP的内爆函数。此外,您可能应该使用一个查询。查看MySQL的IN()函数。您的查询没有运行,因为没有引用$tag
。如果$tags\u array
来自用户输入,那么您很容易受到sql注入的攻击,我只需将问题材料上的$tags\u array
设置为静态,因为它是从db获取的。有许多值得一提。但顺便说一下,谢谢你(Y)