开发者

mysqli_fetch_array returning less results than expected

I'm using the code below to return and echo an array. If I define mysqli_fetch_array($results, MYSQLI_BOTH) then my array is truncated by one result. The 1st result in the array drops off the list. If I remove the MYSQLI_BOTH then I get the results that I expect, but my hosting company (Dreamhost) throws this error:

Warning: mysqli_fetch_array() [function.mysqli-fetch-array]: The result type should be either MYSQLI_NUM, MYSQLI_ASSOC or MYSQLI_BOTH in /blah/blah/blah.co.uk/index.php on line 14

What I really want is to use mysqli_fetch_array($results, 0) so that I catch all of the results, but do not get this error message.

CODE:

$dbc = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die('This is the die connect error');

$query = "SELECT DISTINCT continent开发者_如何学C 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);


The difference in those parameters is only in how the array will be defined.

MYSQLI_NUM = Array items will use a numerical index key.
MYSQLI_ASSOC = Array items will use the column name as an index key.
MYSQLI_BOTH = Array items will be duplicated, with one having a numerical index key and one having the column name as an index key.

You're not losing results.

You are however fetching twice before outputting, which meant you were skipping a row... do it like this:

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


You are using distinct in your query. Ditinct return the unique records only. please check your database if you have multiple continents name in your table or not.

$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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜