我有一个数组,其中包含"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" }
我假设您使用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作为清理您的值或在您的位置有多个 OR 条件)
注4:我在查询中使用$value而不是$key因为就像其他人告诉您的那样,$key是一个索引("唯一值"以从数组中获取值)
更改
$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
是该索引的实际数据。