|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-06-02 15:13 UTC] gubbov53 at hotmail dot com
Description:
------------
fetch_assoc() (see below) does not work. Hangs Apache.
If "$row=$result->fetch_assoc();" is replaced by "$row=$result->fetch_row();" the code is working...
Reproduce code:
---------------
$result=$db->query($query);
$num_results=$result->num_rows;
echo "<p>Number of books found: ".$num_results."</p>";
for ($i=0; $i<$num_results; $i++) {
$row=$result->fetch_assoc(); // Does not work!!!
...
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 06:00:01 2025 UTC |
To have this problem set up a small MySQL db by running the following as root: ------------ create database books_db; use books_db; create table books ( isbn char(13) not null primary key, author char(50), title char(100), price float(4,2) ); grant select, insert, update, delete on books_db.* to books_user@localhost identified by 'password'; insert into books values ("0-672-31697-8", "Michael Morgan", "Java 2 for Professional Developers", 34.99), ("0-672-31745-1", "Thomas Down", "Installing Debian GNU/Linux", 24.99); --------------- Then run this file in IE: -------------- <html> <body> <?php @ $db=new mysqli('localhost','books_user','password','books_db'); if (mysqli_connect_errno()) { echo "Error: Could not connect to database. Please try again later."; exit; } $query="select title,author from books where author like '%Morgan%'"; $result=$db->query($query); $num_results=$result->num_rows; echo "<p>Number of books found: ".$num_results."</p>"; for ($i=0; $i<$num_results; $i++) { $row=$result->fetch_assoc(); // loops here... echo "<p><strong>".($i+1)." Title: "; echo htmlspecialchars(stripslashes($row['title'])); echo "</strong><br />Author: "; echo stripslashes($row['author']); } $result->free(); $db->close(); ?> </body> </html>A temp solution to have it working if you have code with fetch_assoc() is to replace fetch_assoc() with fetch_fields() (to get keys), fetch_row() (to get values), and array_combine(). See example below... <html> <body> <?php @ $db=new mysqli('localhost','books_user','password','books_db'); if (mysqli_connect_errno()) { echo "Error: Could not connect to database. Please try again later."; exit; } $query="select title,author from books where author like '%Morgan%'"; $result=$db->query($query); $num_results=$result->num_rows; echo "<p>Number of books found: ".$num_results."</p>"; $finfo = $result->fetch_fields(); $nc=0; foreach ($finfo as $val) {$row_key[$nc++]=$val->name;} //--- for ($i=0; $i<$num_results; $i++) { //$row=$result->fetch_assoc(); $row_val=$result->fetch_row();$row=array_combine($row_key,$row_val); //--- echo "<p><strong>".($i+1)." Title: "; echo htmlspecialchars(stripslashes($row['title'])); echo "</strong><br />Author: "; echo stripslashes($row['author']); } $result->free(); $db->close(); ?> </body> </html>okay i wrote below with no sucess used the code from gubbov and it works as it should :? when i used my code it seems like it didnt parse the for loop properly but code after it was executed fine so ehhh but thanks gubbov <?php $link = mysqli_connect(localhost,*******,'******') or die; mysqli_select_db($link, o******) or die; if (mysqli_connect_errno()) { echo 'Error: CNC'; exit; } $query = "SELECT a.product_price, b.product_name, b.product_thumb_image, c.category_id, a.product_id FROM jos_vm_product_price AS a, jos_vm_product AS b, jos_vm_product_category_xref AS c WHERE a.product_price >= 100 AND a.product_id = b.product_id AND c.product_id = a.product_id AND b.product_id = c.product_id AND b.product_publish = 'Y' ORDER BY a.product_price"; $result = mysqli_query($link, $query); $num_results = mysqli_num_rows($result); echo "<p>Number Found: ".$num_results."</p>"; for ($i=0, $i <$num_results; $i++) { $row = mysqli_fetch_row($result); echo "<p>".($i+1).". Price: "; echo ($row['product_price']); echo "</p>"; } mysqli_free_result($result); mysqli_close($link); ?>