php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #77495 STMT execute memory leak
Submitted: 2019-01-21 00:47 UTC Modified: -
Votes:5
Avg. Score:4.4 ± 0.8
Reproduced:4 of 4 (100.0%)
Same Version:2 (50.0%)
Same OS:3 (75.0%)
From: istvan at dupai dot hu Assigned:
Status: Open Package: MySQLi related
PHP Version: 7.3.1 OS: Windows
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2019-01-21 00:47 UTC] istvan at dupai dot hu
Description:
------------
MySQLi prepared statement execution in a loop increases memory consumption rapidly constantly.

Test script:
---------------
$now = microtime(true);
$db = new \Mysqli("localhost", "root", "password", "database", 3306);

$stmt = $db->prepare("SELECT * FROM someTable WHERE id=?");
$stmt->bind_param("i", $id);

for( $id=1; $id<1000; $id++ ) {
    $stmt->execute();
    $result = $stmt->get_result();
    $stmt->free_result();
}

echo "Time taken: ".(microtime(true)-$now)." seconds\n";
echo "Peak memory usage: ".number_format(memory_get_peak_usage())." bytes\n";

Expected result:
----------------
Memory usage should peak and stay around 400 KBs.

Actual result:
--------------
Memory usage constantly grows.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-01-07 11:05 UTC] thomas dot kosel at aspera dot com
I can reproduce this on 7.3.6 in a docker environment
The issue did not apply, when the prepare and bind parts are in the loop too.
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Wed Jun 03 01:01:25 2020 UTC