0

我已经有一段时间没有使用 PHP 和 MySQL 了,所以很遗憾我失去了一些知识,我需要一些关于我的代码的帮助。

下面我有一些代码可以从数据库中获取 9 个不同的值,但它对我不起作用。由于 PHP 错误消息被设置为关闭,我无法判断正确知道什么错误。

我错了还是这里出了什么问题?

for (i = 0; i < 10; i ++) {
$query2 = "SELECT * from arkitekturobjekt WHERE id = '{$buildingIdArray[i]}'";
$result2 = $mysqli->query($query2);
$row = mysqli_fetch_object($result2);
// Do some stuff here
}

编辑:感谢到目前为止的帮助,但它仍然不起作用!$buildingIdArray[]我有这个代码来为数组设置值有一些问题:

$buildingIdArray  = array();
$numbers = range (1, 40);
shuffle($numbers);
$buildingIdArray=array_slice ($numbers,1,9)

如果我这样做,它会起作用:

$buildingIdArray  = array(1,2,3,4,5,6,7,8,9);

有什么问题?

4

3 回答 3

4

$i不是i

for ($i = 0; $i < 10; $i ++) 
于 2013-06-12T17:43:32.977 回答
4

这就是我的评论的意思:“您确定要在循环中查询,而不仅仅是组成一个 id 列表,查询一次,然后遍历结果?例如:WHERE id IN (1, 2, 4, 6 , 10)"

// get the first 10 items from building array
$id_arr = array_slice($buildingIdArray, 0, 10); 

$query2 = "SELECT * from arkitekturobjekt WHERE id IN (". implode(',', $id_arr) .")";
$result2 = $mysqli->query($query2);

while($row = mysqli_fetch_object($result2))
{
  //Do some stuff here
}

请记住,您仍然负责这里的消毒。我不知道是什么填充了您的建筑 id 数组,所以如果它来自 $_GET、$_POST、$_REQUEST 或其他任何可能由用户生成的内容,您可以对 mysql 注入开放

于 2013-06-12T17:52:51.567 回答
1

您不应该在 for 循环内运行查询。

使用循环构建查询,然后只运行一个。

// prepare the where conditions
$where2 = Array();
for($i = 0; $i < 10; $i ++) {
  $where2[] = "`id` = '" . $buildingIdArray[$i] . "'";
}

// put the query and the conditions together
$query2 = "SELECT * FROM `arkitekturobjekt` WHERE " . implode(' OR ', $where2) . ";";

// run the query and loop results
$result2 = $mysqli->query($query2);
while($row = mysqli_fetch_object($result2)) {
  // do stuff with the results here
}
于 2013-06-12T17:52:22.460 回答