|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #25869 Convert empty strings to NULL in DB::execute()
Submitted: 2003-10-14 13:52 UTC Modified: 2003-10-14 14:00 UTC
From: chris at statgen dot ncsu dot edu Assigned:
Status: Closed Package: PEAR related
PHP Version: 5.0.0b1 (beta1) OS:
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: chris at statgen dot ncsu dot edu
New email:
PHP Version: OS:


 [2003-10-14 13:52 UTC] chris at statgen dot ncsu dot edu
Issues with freeing Prepared Queries

Here are some issues with freeing prepared queries in the
PostgreSQL implementation of DB.

1) If you use the query member in the form where you provide parameter values as a second argument the query is prepared and executed but the values produced by the prepare step are never freed. This leads to a considerable memory leaks if the query member is used repeatedly in a long-running process.

Here's a suggested fix for this one. In DB_common::query,
changes marked with "CSCS":

    function &query($query, $params = array()) {
        if (sizeof($params) > 0) {
            $sth = $this->prepare($query);
            if (DB::isError($sth)) {
                return $sth;
// CSCS Prepared query should be freed 
// CSCS     return $this->execute($sth, $params);
            $res = &$this->execute($sth, $params); // CSCS
            $this->freeResult($sth);               // CSCS
            return $res;                           // CSCS
        } else {

2) If you explicitly prepare a query there is no documented method defined for freeing the prepared version. This is (generally) a smaller memory leak since queries are usually prepared once and re-used often.

3) The freeResult member of DB_pgsql does not unset the query's entry in the prepared_queries array. The entries in the prepare_tokens and prepare_types arrays are freed.

Suggested fix in DB_pgsql::freeResult is to add one line...

     unset($this->prepared_queries[(int)$result]); // CSCS

4) Not sure what effect this has but the prepare_tokens and prepare_types arrays are defined in both the base DB_common class and the DB_pgsql class. It seems like just having them in the DB_common class would be enough.

Reproduce code:
Let me know if you would like some reproduce code.


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2003-10-14 13:52 UTC] chris at statgen dot ncsu dot edu
Corrected spelling mistake in summary.
 [2003-10-14 14:00 UTC]
Thank you for your bug report. This issue has already been fixed
in the latest released version of PHP, which you can download at

this issue was closed in the 1.5.0RC1.

See here for details:

PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Thu Aug 05 02:01:23 2021 UTC