ID: 42378 Comment by: uwendel at mysql dot com Reported By: jullrich at sans dot org Status: Assigned Bug Type: MySQLi related Operating System: Linux (CentOS 4.5) PHP Version: 5.2.3 Assigned To: andrey New Comment:
Thanks! May I also ask you for the MySQL Server version? I've written a test which reads 100 rows from a table which has a column that I use FORMAT() on. The test checks all *INT* types, FLOAT and DECIMAL. So far I have not been able to reproduce your problem with PHP 5_2 CVS and PHP 6. I'll give it another try with your table definition... Previous Comments: ------------------------------------------------------------------------ [2007-09-03 18:55:58] jullrich at sans dot org as requested, the table definition: CREATE TABLE `trends` ( `targetport` int(11) NOT NULL default '0', `sources` double(17,4) default NULL, `current_sources` double(17,0) default NULL, `reports` double(17,4) default NULL, `current_reports` double(17,0) default NULL, `targets` double(17,4) default NULL, `current_targets` double(17,0) default NULL, `maxsources` int(11) default NULL, `maxtargets` int(11) default NULL, `maxreports` int(11) default NULL, `trend` float default NULL, PRIMARY KEY (`targetport`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ------------------------------------------------------------------------ [2007-09-03 14:52:13] uwendel at mysql dot com Can you add the table definition to the bug report? ------------------------------------------------------------------------ [2007-08-23 10:42:28] [EMAIL PROTECTED] Assigned to the Mysqli maintainer. ------------------------------------------------------------------------ [2007-08-22 11:44:28] jullrich at sans dot org 'cast' can be used as a workaround: works: cast(format(trend,2) as char(10))) does not work (same memory error): cast(format(trend,2) as char) ------------------------------------------------------------------------ [2007-08-22 11:33:14] jullrich at sans dot org Description: ------------ The use of the mysql command "format" will lead to memory exhaustion on bind_results. Here sample code that does cause the issue: $sQuery="select targetport,format(trend,2) from trends where current_targets>10 and trend is not null order by trend desc limit 100"; $oStmt=$oDB->prepare($sQuery); $oStmt->execute(); $oStmt->store_result(); $oStmt->bind_result($nPort,$nTrend); This code works fine if $sQuery is replaced with: $sQuery="select targetport,trend from trends where current_targets>10 and trend is not null order by trend desc limit 100"; removing 'store_result' has no effect. Other changes to the SQL statement have no effect either. Error message logged: PHP Fatal error: Allowed memory size of 83886080 bytes exhausted (tried to allocate 1431655788 bytes) in query.html on line 4 Reproduce code: --------------- $sQuery="select targetport,format(trend,2) from trends where current_targets>10 and trend is not null order by trend desc limit 100"; $oStmt=$oDB->prepare($sQuery); $oStmt->execute(); $oStmt->store_result(); $oStmt->bind_result($nPort,$nTrend); Expected result: ---------------- I expected the query to "happen" and get executed. Actual result: -------------- PHP Fatal error: Allowed memory size of 83886080 bytes exhausted (tried to allocate 1431655788 bytes) in query.html on line 4 (Line number corresponds to the 'bind_result' statement) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42378&edit=1