运行一个mysql foreach,其中一组值无效

时间:2015-01-18 16:42:51

标签: php mysql

我有一个数组,其值为“849”和“584”或“275”等,并且正在针对每个值运行mySQL查询。它似乎执行正常但我没有收到返回的值。我在这里做错了什么?

$content = "";
        foreach ($cookies_array as $key => $value){
            $sql_select_recent_items = $db->query("SELECT id, name FROM products WHERE id=".$key." LIMIT 0,10");

            $content .="".$sql_recent_activity_items["id"]." - ".$sql_recent_activity_items["name"]."<br>";

        }

当我在数组上执行var_dump时,它显示如下:

array(10) { [0]=> string(3) "852" [1]=> string(3) "856" [2]=> string(3) "720" [3]=> string(3) "783" [4]=> string(3) "784" [5]=> string(3) "785" [6]=> string(3) "708" [7]=> string(3) "716" [8]=> string(3) "717" [9]=> string(3) "749" }

2 个答案:

答案 0 :(得分:1)

我假设你使用Mysqli或PDO作为$ db。

在这两种情况下,query()的结果都会返回需要获取值的“结果类”。它不会返回包含结果的简单数组。

Mysqli fetch:http://php.net/manual/en/mysqli-result.fetch-assoc.php

PDO:http://php.net/manual/en/pdostatement.fetch.php

(有例子,所以很容易;))

所以在这里使用Mysqli的样本应该是什么样的:

$content = "";
        foreach ($cookies_array as $key => $value)
        {
            $result = $db->query("SELECT id, name FROM products WHERE id=".$value." LIMIT 0,10");
            while ($row = $result->fetch_assoc()) 
            {
                $content .="".$row["id"]." - ".$row["name"]."<br>";
            }
        }

注1:我没有检查错误,在这种情况下,文件$ result应为FALSE。 注意2:如果来自客户端,您必须清理附加到查询的任何参数,特别是它。 (cookie在客户端部分)。 而不是

"SELECT id, name FROM products WHERE id=".$value." LIMIT 0,10"

应该看起来像

"SELECT id, name FROM products WHERE id=".$db->real_escape_string($value)." LIMIT 0,10"

注意3:我还建议批量查询性能,你可以使用预备语句(http:// php.net/manual/en/mysqli.prepare.php并使用bind_param作为清理你的值 或者你的WHERE中有多个OR条件

注意4:我在你的查询中使用$ value而不是$ key,因为像其他人告诉你的那样,$ key是一个索引(“唯一值”从数组中取回值)

答案 1 :(得分:0)

更改

$sql_select_recent_items = $db->query("SELECT id, name FROM products WHERE id=".$key." LIMIT 0,10");

$sql_select_recent_items = $db->query("SELECT id, name FROM products WHERE id=".$value." LIMIT 0,10");

$key是索引,而$value是该索引的实际数据。