diff options
author | Nils Adermann <naderman@naderman.de> | 2006-08-11 17:43:03 +0000 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2006-08-11 17:43:03 +0000 |
commit | d8af8223cd258678aca5037db0446aa1ff8ea78a (patch) | |
tree | 8827488a1de43b9c004019ba90ff8a5bc54298c7 /phpBB/includes/db/dbal.php | |
parent | 7508b00978565e1c1984be6a62e1142059d1daf0 (diff) | |
download | forums-d8af8223cd258678aca5037db0446aa1ff8ea78a.tar forums-d8af8223cd258678aca5037db0446aa1ff8ea78a.tar.gz forums-d8af8223cd258678aca5037db0446aa1ff8ea78a.tar.bz2 forums-d8af8223cd258678aca5037db0446aa1ff8ea78a.tar.xz forums-d8af8223cd258678aca5037db0446aa1ff8ea78a.zip |
Adding the sql_in_set function which should give us a bit of a performance improvement for queries using IN with just one value
git-svn-id: file:///svn/phpbb/trunk@6261 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/db/dbal.php')
-rw-r--r-- | phpBB/includes/db/dbal.php | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index dcf9947ddf..53850b77b2 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -285,6 +285,49 @@ class dbal return $query; } + function sql_in_set($field, $array) + { + if (!sizeof($array)) + { + trigger_error('No values specified for SQL IN comparison', E_USER_ERROR); + } + + $bitfield = (strpos($field, 'bitfield') !== false); + + $values = array(); + foreach ($array as $var) + { + if (is_null($var)) + { + $values[] = 'NULL'; + } + else if (is_string($var)) + { + if (!$bitfield) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = $this->sql_escape_binary($var); + } + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + if (sizeof($values) == 1) + { + return $field . ' = ' . $values[0]; + } + else + { + return $field . ' IN (' . implode(',', $values) . ')'; + } + } + function sql_escape_binary($msg) { return "'" . $this->sql_escape($msg) . "'"; |