2012-11-28 31 views
0

所以,这是我遇到的一件奇怪的事情,也许是因为深夜或我只是缺少一些基本的东西。我必须将查询发送到数组,而不是循环查询,因为其他API调用可以发送数组而不是来自数据库。该查询返回多个项目,因为它也是。到代码:对数组的MySQLi查询 - 在数组上循环返回空结果

$result = $db->query("SELECT ID FROM tblTemp WHERE FOREIGN_KEY='2'"); 
$tmp = $result->fetch_array(MYSQLI_BOTH);   

for($i = count($tmp); $i > 0; --$i) { 
echo '<option value="'.$tmp[$i-1].'">Item '.$i.'</option>'; 
} 

所以,我只是试图让数组项成HTML选择。这适用于传递$ tmp数组;但是,使用查询时发生的情况是,只有第一条记录被填充到select中。添加了正确数量的项目,但缺少值。 即

<option value="">Item 2</option> 
<option value="7">Item 1</option> 

编辑:PHP确实抛出的错误:未定义抵消:1

回答

1

你只取出由查询一个记录,这就是为什么你有一个值,并得到一个未定义的偏移。 在以下示例中,while循环用于从查询中获取所有结果。

$result = $db->query("SELECT ID FROM tblTemp WHERE FOREIGN_KEY='2'"); 
$html = ""; 
$i = 1; 
while($tmp = $result->fetch_array(MYSQLI_BOTH)) { 
    $html = '<option value="'.$tmp['ID'].'">Item '.$i.'</option>'.html; 
    $i++; 
} 
echo $html; 
+0

好吧,我明白了;但是,代码依然显示了$ tmp数组中的2个项目。这是可见的,因为在for循环中添加了2个元素。我无法更改for循环,因为它可能是一个查询,或者它可能是一个传递的数组,所以默认情况下所有内容都将转到数组。我应该只是通过这个查询并循环查询并将这些项目添加到$ tmp数组中?我只是认为有一个更清洁的方法。 – Munsterlander

+0

@ user1666691您在数组中获得两个项目,因为您在'fetch_array'中传递'MYSQLI_BOTH',其中一个ID为'0',另一个ID为'ID',但其值相同。如果你需要一个数组,就像你说的那样,只是在查询结果的while循环中建立一个数组。 – Musa

+0

Right-o。在弄乱之后,我想这是我最终必须做的事情。 – Munsterlander

0

其实,

 

    for($i = count($tmp); $i > 0; --$i) { 
    echo 'Item '.$i.''; 
    } 
 

应该工作,如果$ TMP返回各适量。确保$ tmp返回了正确的数据。

希望这会有所帮助。

+0

当我做到了,通过数组不再起作用。他们显示一个短。 – Munsterlander

+0

你确定** $ tmp **从数据库中返回了正确的数据吗?这应该工作。 –

+0

返回了正确的数据,但显然fetch_array不会将所有结果都存入一个您可以参考的数组中。它只是获得了结果集中记录的位置,并且循环了指针。上面的答案通过循环并将值推送到$ tmp数组来解决问题。 – Munsterlander