我有:
$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
任何人都可以告诉我代码有什么问题吗?
谢谢!
答案 0 :(得分:4)
我很抱歉,但你的代码完全没有意义。我很惊讶你得到了那个结果。让我们来看看吧。
引号在哪里?
$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 *
答案 1 :(得分:3)
你不能使用$ array3来构建查询,因为它是一个数组。相反,你可以编码像贝娄 -
foreach($array1 as $i=>$itemz)
{
$array2[$i] = $itemz[place][id];
$array3[$i] = $itemz[place][location][city];
$sql = "select * from places where id=".$array2[$i]." and location=".$array3[$i]."";
}
答案 2 :(得分:2)
这一行:
$array3[] = $itemz[place][location][city];
导致创建一个名为$array3
的数组,并向其添加一个等于$itemz[place][location][city]
的元素,其中包含0
的键。当您尝试将此变量嵌入查询时,您会遇到问题,因为它不是字符串。
您可能需要的是:
$id = $itemz['place']['id'];
$city = $itemz['place']['location']['city'];
$sql = "select * from places where id=".intval($id)." and location='".
mysql_real_escape_string($city)."'";
请注意,我已更改以解决代码(indexing into arrays with constants instead of strings和leaving your code vulnerable to SQL injection)中的其他严重问题。
答案 3 :(得分:1)
为什么在只需要标准变量时使用数组:
$array1 = //contains places ids and locations;
foreach($array1 as $itemz)
{
$id = $itemz['place']['id'];
$city = $itemz['place']['location']['city'];
$sql = "select * from places where id='$id' and location='$city'";
}