DB::$usenull param can be used to decide whether insert()-like commands insert NULL or empty string for NULL

This commit is contained in:
Sergey Tsalkov
2013-06-02 19:22:14 -07:00
parent 9e4cbc28c1
commit e9a55de0b4
2 changed files with 19 additions and 1 deletions

View File

@@ -35,6 +35,7 @@ class DB {
public static $nonsql_error_handler = null; public static $nonsql_error_handler = null;
public static $throw_exception_on_nonsql_error = false; public static $throw_exception_on_nonsql_error = false;
public static $nested_transactions = false; public static $nested_transactions = false;
public static $usenull = true;
// internal // internal
protected static $mdb = null; protected static $mdb = null;
@@ -54,6 +55,7 @@ class DB {
if ($mdb->nonsql_error_handler !== DB::$nonsql_error_handler) $mdb->nonsql_error_handler = DB::$nonsql_error_handler; if ($mdb->nonsql_error_handler !== DB::$nonsql_error_handler) $mdb->nonsql_error_handler = DB::$nonsql_error_handler;
if ($mdb->throw_exception_on_nonsql_error !== DB::$throw_exception_on_nonsql_error) $mdb->throw_exception_on_nonsql_error = DB::$throw_exception_on_nonsql_error; if ($mdb->throw_exception_on_nonsql_error !== DB::$throw_exception_on_nonsql_error) $mdb->throw_exception_on_nonsql_error = DB::$throw_exception_on_nonsql_error;
if ($mdb->nested_transactions !== DB::$nested_transactions) $mdb->nested_transactions = DB::$nested_transactions; if ($mdb->nested_transactions !== DB::$nested_transactions) $mdb->nested_transactions = DB::$nested_transactions;
if ($mdb->usenull !== DB::$usenull) $mdb->usenull = DB::$usenull;
return $mdb; return $mdb;
} }
@@ -124,6 +126,7 @@ class MeekroDB {
public $nonsql_error_handler = null; public $nonsql_error_handler = null;
public $throw_exception_on_nonsql_error = false; public $throw_exception_on_nonsql_error = false;
public $nested_transactions = false; public $nested_transactions = false;
public $usenull = true;
// internal // internal
public $internal_mysql = null; public $internal_mysql = null;
@@ -471,7 +474,7 @@ class MeekroDB {
protected function sanitize($value) { protected function sanitize($value) {
if (is_object($value) && ($value instanceof MeekroDBEval)) return $value->text; if (is_object($value) && ($value instanceof MeekroDBEval)) return $value->text;
else if (is_null($value)) return 'NULL'; else if (is_null($value)) return $this->usenull ? 'NULL' : "''";
else if (is_bool($value)) return ($value ? 1 : 0); else if (is_bool($value)) return ($value ? 1 : 0);
else if (is_int($value)) return $value; else if (is_int($value)) return $value;
else if (is_float($value)) return $value; else if (is_float($value)) return $value;

View File

@@ -95,6 +95,21 @@ class BasicTest extends SimpleTest {
$password = DB::queryFirstField("SELECT password FROM accounts WHERE favorite_word IS NULL"); $password = DB::queryFirstField("SELECT password FROM accounts WHERE favorite_word IS NULL");
$this->assert($password === 'goodbye'); $this->assert($password === 'goodbye');
DB::$usenull = false;
DB::insertUpdate('accounts', array(
'id' => 3,
'favorite_word' => null,
));
$password = DB::queryFirstField("SELECT password FROM accounts WHERE favorite_word=%s AND favorite_word=%s", null, '');
$this->assert($password === 'goodbye');
DB::$usenull = true;
DB::insertUpdate('accounts', array(
'id' => 3,
'favorite_word' => null,
));
DB::$param_char = '###'; DB::$param_char = '###';
$bart = DB::queryFirstRow("SELECT * FROM accounts WHERE age IN ###li AND height IN ###ld AND username IN ###ls", $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')); array(15, 25), array(10.371, 150.123), array('Bart', 'Barts'));