From e5f6a0ae0870892e169771b275377186bd018de8 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 3 Nov 2003 16:19:48 +0000 Subject: [PATCH] applied tbsky's so_sql patch: 1. remove a redundant line (var $non_db_cols = array();) 2. make read function process scalar value, as ur comment say. 3. make search function work on "NULL" values --- etemplate/inc/class.so_sql.inc.php | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/etemplate/inc/class.so_sql.inc.php b/etemplate/inc/class.so_sql.inc.php index c2177195a1..de270e4682 100644 --- a/etemplate/inc/class.so_sql.inc.php +++ b/etemplate/inc/class.so_sql.inc.php @@ -48,7 +48,6 @@ class so_sql var $data; // holds the content of all db_cols var $debug = 0; var $empty_on_write = 'NULL'; - var $non_db_cols = array(); /*! @function so_sql @@ -217,6 +216,12 @@ class so_sql */ function read($keys) { + if (!is_array($keys)) + { + $pk = array_keys($this->db_key_cols); + if ($pk) $keys = array($pk[0] => $keys); + } + $this->init($keys); $this->data2db(); @@ -324,7 +329,7 @@ class so_sql $keys = ''; foreach($this->db_key_cols as $db_col => $col) { - $keys .= ($keys ? ',':'') . "$db_col='".addslashes($this->data[$col])."'"; + $keys .= ($keys ? ' AND ':'') . "$db_col='".addslashes($this->data[$col])."'"; } $this->db->query($sql = "UPDATE $this->table_name SET $vals WHERE $keys",__LINE__,__FILE__); } @@ -393,19 +398,26 @@ class so_sql { if (!is_array($criteria)) { - $query = ' WHERE '.$criteria; + $query = $criteria ? ' WHERE '.$criteria : ''; } else { $criteria = $this->data2db($criteria); foreach($this->db_cols as $db_col => $col) { //echo "testing col='$col', criteria[$col]='".$criteria[$col]."'
"; - if (isset($criteria[$col]) && ($empty || $criteria[$col] != '')) + if (array_key_exists($col,$criteria) && ($empty || $criteria[$col] != '')) { - $query .= ($query ? " $op " : ' WHERE ') . $db_col . + if ($criteria[$col] === NULL) + { + $query .= ($query ? " $op " : ' WHERE ') . "$db_col IS NULL"; + } + else + { + $query .= ($query ? " $op " : ' WHERE ') . $db_col . ($wildcard || strstr($criteria[$col],'*') || strstr($criteria[$col],'?') ? " LIKE '$wildcard".strtr(str_replace('_','\\_',addslashes($criteria[$col])),'*?','%_')."$wildcard'" : "='".addslashes($criteria[$col])."'"); + } } } }