Re: mysql_fetch_array() vs mysql_fetch_assoc() WAS: Re: [PHP] Why does this script run out of memory?

From: Date: Fri, 28 Oct 2011 22:48:19 +0000
Subject: Re: mysql_fetch_array() vs mysql_fetch_assoc() WAS: Re: [PHP] Why does this script run out of memory?
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-315525@lists.php.net to get a copy of this message
On Fri, Oct 28, 2011 at 06:19:56PM -0400, Daniel Brown wrote: > On Fri, Oct 28, 2011 at 18:13, Paul Halliday <paul.halliday@gmail.com> wrote: > > > > Whats the difference between fetch_assoc and fetch_row? > > > > I use: > > while ($row = mysql_fetch_row($theQuery)) { > > ? ?doCartwheel; > > } > > > > on just under 300 million rows and nothing craps out. I have > > memory_limit set to 4GB though. Although, IIRC I pushed it up for GD > > not mysql issues. > > > > Same OS and php ver, MySQL is 5.1.48 > > Please don't hijack other's threads to ask a question. I've > started this as a new thread to address this question. > > mysql_fetch_array() grabs all of the data and places it in a > simple numerically-keyed array. > > By contrast, mysql_fetch_assoc() grabs it and populates an > associative array. This means that the column names (or aliases, et > cetera) become the keys for the array. With mysql_fetch_assoc(), you > can still call an array key by number, but it's not vice-versa with > mysql_fetch_array(). I'm not seeing any numeric keys in my mysql_fetch_assoc() arrays. However, mysql_fetch_row (by default) does both: the array will be indexed numerically from 0 to N-1 corresponding to the table's N columns, and the array will also have string key indices which correspond to the query's column names. So by default, mysql_fetch_row uses twice the amount of data, because each field appears in the array twice. var_dump( $row ) will show in graphic detail.

« previous php.general (#315525) next »