mysqli_fetch_array返回的结果少于预期

时间:2010-07-27 19:06:20

标签: php mysql arrays

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

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

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

感谢您的帮助。

代码:

$ dbc = mysqli_connect($ dbhost,$ dbuser,$ dbpass,$ dbname)或die('这是模具连接错误');

$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);

2 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:0)

您在查询中使用了distinct。不同的仅返回唯一记录。如果您的表中是否有多个大洲名称,请检查您的数据库。

$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);