From 860da8d18a328129b81b825590c7312fc7ea756a Mon Sep 17 00:00:00 2001 From: Sergey Tsalkov Date: Tue, 31 May 2011 21:50:24 -0400 Subject: [PATCH] insert(), replace(), and update() now handle the value NULL correctly --- db.class.php | 14 +++++++++++--- simpletest/BasicTest.php | 13 ++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/db.class.php b/db.class.php index 08dec1f..0a77dfd 100644 --- a/db.class.php +++ b/db.class.php @@ -133,8 +133,12 @@ class DB if (is_object($value) && ($value instanceof MeekroDBEval)) { $value = $value->text; } else { - if (is_array($value)) $value = serialize($value); - $value = (is_int($value) ? $value : "'" . DB::escape($value) . "'"); + if (is_array($value) || is_object($value)) $value = serialize($value); + + if (is_string($value)) $value = "'" . DB::escape($value) . "'"; + else if (is_null($value)) $value = 'NULL'; + else if (is_bool($value)) $value = ($value ? 1 : 0); + } $keyval[] = "`" . $key . "`=" . $value; @@ -171,7 +175,11 @@ class DB if (is_object($datum) && ($datum instanceof MeekroDBEval)) { $datum = $datum->text; } else { - $datum = (is_int($datum) ? $datum : "'" . DB::escape($datum) . "'"); + if (is_array($datum) || is_object($datum)) $datum = serialize($datum); + + if (is_string($datum)) $datum = "'" . DB::escape($datum) . "'"; + else if (is_null($datum)) $datum = 'NULL'; + else if (is_bool($datum)) $datum = ($datum ? 1 : 0); } $insert_values[] = $datum; } diff --git a/simpletest/BasicTest.php b/simpletest/BasicTest.php index 87a2392..0ce6807 100644 --- a/simpletest/BasicTest.php +++ b/simpletest/BasicTest.php @@ -30,7 +30,8 @@ class BasicTest extends SimpleTest { `username` VARCHAR( 255 ) NOT NULL , `password` VARCHAR( 255 ) NOT NULL , `age` INT NOT NULL DEFAULT '10', - `height` DOUBLE NOT NULL DEFAULT '10.0' + `height` DOUBLE NOT NULL DEFAULT '10.0', + `favorite_word` VARCHAR( 255 ) NULL DEFAULT 'hi' ) ENGINE = InnoDB"); } @@ -78,7 +79,8 @@ class BasicTest extends SimpleTest { 'username' => 'Charlie\'s Friend', 'password' => 'goodbye', 'age' => 30, - 'height' => 155.23 + 'height' => 155.23, + 'favorite_word' => null, )); $this->assert(DB::insertId() === 3); @@ -86,6 +88,9 @@ class BasicTest extends SimpleTest { $counter = DB::queryFirstField("SELECT COUNT(*) FROM accounts"); $this->assert($counter === strval(3)); + $password = DB::queryFirstField("SELECT password FROM accounts WHERE favorite_word IS NULL"); + $this->assert($password === 'goodbye'); + DB::$param_char = '###'; $bart = DB::queryFirstRow("SELECT * FROM accounts WHERE age IN ###li AND height IN ###ld AND username IN ###ls", array(15, 25), array(10.371, 150.123), array('Bart', 'Barts')); @@ -120,7 +125,7 @@ class BasicTest extends SimpleTest { $this->assert(count($results) === 2); $columnlist = DB::columnList('accounts'); - $this->assert(count($columnlist) === 5); + $this->assert(count($columnlist) === 6); $this->assert($columnlist[0] === 'id'); $this->assert($columnlist[4] === 'height'); @@ -148,11 +153,13 @@ class BasicTest extends SimpleTest { DB::update('accounts', array( 'password' => DB::sqleval("REPEAT('blah', %i)", 4), + 'favorite_word' => null, ), 'username=%s', 'newguy'); $row = null; $row = DB::queryOneRow("SELECT * FROM accounts WHERE username=%s", 'newguy'); $this->assert($row['password'] === 'blahblahblahblah'); + $this->assert($row['favorite_word'] === null); DB::query("DELETE FROM accounts WHERE password=%s", 'blahblahblahblah'); $this->assert(DB::affectedRows() === 1);