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

Reply via email to