我已经有一段时间没有使用过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);
可能出现什么问题?
答案 0 :(得分:4)
$i
不是i
:
for ($i = 0; $i < 10; $i ++)
答案 1 :(得分:4)
这就是我的评论意思:&#34;你确定要在循环中查询而不只是撰写一个id列表,查询一次,然后循环结果?示例:WHERE id IN(1,2,4,6,10)&#34;
// 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注入
答案 2 :(得分: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
}