2010-07-27 43 views
0

我正在使用下面的代码返回并回显数组。如果我定义'mysqli_fetch_array($ results,MYSQLI_BOTH)',那么我的数组被截断一个结果。阵列中的第一个结果从列表中删除。如果我删除MYSQLI_BOTH,那么我得到我期望的结果,但我的托管公司(Dreamhost)抛出此错误:mysqli_fetch_array返回的结果比预期的要少

警告:mysqli_fetch_array()[function.mysqli-fetch-array]:结果类型应该是MYSQLI_NUM,MYSQLI_ASSOC或MYSQLI_BOTH在/blah/blah/blah.co.uk/index.php on line 14

我真正想要的是使用mysqli_fetch_array($ results,0),以便捕获所有结果,但不要收到此错误消息。

感谢您的帮助。

CODE:

$ DBC = mysqli_connect($ DBHOST,$ DBUSER,$ DBPASS,$ DBNAME)或死亡( '这是死连接错误');

$query = "SELECT DISTINCT continent FROM tour"; 

$result = mysqli_query($dbc, $query) or die('This is the die query error'); 

$row = mysqli_fetch_array($result, MYSQLI_BOTH); // was ($result, 0) to start at 0, now in error, starts at 1 missing results 

while($row = mysqli_fetch_array($result)) { 

    echo '<a href="country.php?continent=' . $row['continent'] . '">' . $row['continent'] . "</a><br />\n"; 
    } 

mysqli_close($dbc); 
+0

这是不是真的回答的,因为你不告诉我们的是,性质第一条记录:它是否与第二条相同(可以)? – 2010-07-27 19:09:20

回答

2

这些参数的区别仅在于如何定义数组。

MYSQLI_NUM =数组项目将使用数字索引键。
MYSQLI_ASSOC =数组项目将使用列名作为索引键。
MYSQLI_BOTH =数组项将被复制,其中一个具有数字索引键,另一个具有列名作为索引键。

你不会失去结果。

你输出,这意味着你跳过行之前但是取两次......像这样做:

$query = "SELECT DISTINCT continent FROM tour"; 

$result = mysqli_query($dbc, $query) or die('This is the die query error'); 

while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 

    echo '<a href="country.php?continent=' . $row['continent'] . '">' . $row['continent'] . "</a><br />\n"; 
    } 

mysqli_close($dbc); 
+0

感谢您的回复。但是,当我尝试这样做时,我再次'失去'从数据库中获得的第一个结果。 我不太确定为什么这仍然发生。除此之外,当我使用上面提到的MYSQLI_ASSOC时,我仍然收到错误消息。 非常奇特! – njwrigley 2010-07-29 10:46:25

+0

没有办法。在MySQL中直接运行该查询,看看你回来了。删除MYSQLI_ASSOC参数,只需将查询作为参数。 – Fosco 2010-07-29 12:12:32