我有一个数组,其值为“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" }
答案 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
是该索引的实际数据。