Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 使用for循环从数组中搜索MySql中的Id_Php_Mysql_Sql_For Loop - Fatal编程技术网

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)