PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » Database » DB » Bug #9859

Empty strings are treated as booleans

Details

Submitted2007-01-17 21:45 UTC
Fromgahorth1234 at yahoo dot co dot uk
Assignedaharvey
StatusBogus
PackageDB
PHP Version5.2.0
OSSuse Linux 10.2
Roadmaps(Not assigned)

Comments

[2007-01-17 21:45 UTC] gahorth1234 at yahoo dot co dot uk

Description:
------------
I've noticed that if my SQL query contains an empty string as one of the values, "smartQuote" in common.php treats this value as a boolean and so stores a zero in the database, instead of an empty string as expected.

e.g.
$db->query("UPDATE `Stock` SET `Spec` = ?", array(substr('',0,255)));

Obviously the "substr" function above would normally have a proper string in it! But if it's from, say $_POST or $_GET, and that field was left blank on the form, the query then becomes "UPDATE `Stock` SET `Spec` = 0" (from the mysql log).

It could be that this is actually considered a PHP problem, but a quick fix (for me) is to replace the following line in common.php within the "smartQuote" function (line 429 in common.php from DB release 1.7.7):

Original line:
} elseif (is_bool($in)) {

My replaced line:
} elseif (is_bool($in) && !empty($in)) {

Test script:
---------------
$db->query("UPDATE `Stock` SET `Spec` = ?", array(substr($_GET['value'],0,255)));

Expected result:
----------------
UPDATE `Stock` SET `Spec` = ''

Actual result:
--------------
UPDATE `Stock` SET `Spec` = 0