我有:
$array1 = //contains places ids and locations;
$array2 = array();
$array3 = array();
foreach($array1 as $itemz)
{
$array2[] = $itemz[place][id];
$array3[] = $itemz[place][location][city];
$sql = "select * from places where id=".$array2." and location=".$array3."";
}
但是当我打印 $sql 时,我得到:
select * from places where id=12 and location=Array
任何人都可以告诉我代码有什么问题吗?
谢谢!
最佳答案
很抱歉,您的代码根本没有意义。我很惊讶你能得到那个结果。让我们来看看它。
引号在哪里?
$array2[] = $itemz[place][id];
$array3[] = $itemz[place][location][city];
此处遗漏引号,请添加
$array2[] = $itemz['place']['id'];
$array3[] = $itemz['place']['location']['city'];
数组到字符串的转换
$sql = "select * from places where id=".$array2." and location=".$array3."";
这个声明不应该有两个原因。
假设
id
是一个 INT 字段,而您在$array2
中有一堆 INT,如果没有 MySQL,您仍然无法比较它们IN
.您正在将 PHP 数组转换为字符串。那行不通的。
因为你在循环中运行它,$array2[]
和 $array3[]
将继续变化并增长。
所以你实际上想做的是想出一个像
这样的查询$sql = "SELECT *
FROM places
WHERE
id IN (" . implode(',', $array2) . ") AND
location IN (" . implode(',', $array3) . ")";
但这根本没有意义,因为随着循环的继续,您将逐步检索相同的数据。
所以我认为你真正想做的是
$sql = "SELECT *
FROM places
WHERE
id = {$itemz['place']['id']} AND
location = {$itemz['place']['location']['city']}";
这很可能是您所需要的。这会在您遍历数组时检索每一行的行。
我会做的一些改进是。
在循环完成后运行一次查询,这样您只需运行一次查询而不是 n
次。
此外,考虑只检索您需要的列,而不是执行 SELECT *
关于PHP foreach,查询中使用的数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5715624/