From c0743381b20910a3fc23b391e8b2009ac5771ae8 Mon Sep 17 00:00:00 2001 From: Derek Allard Date: Mon, 11 Feb 2008 05:54:44 +0000 Subject: database enhancements, compatibility additions and bugfixes --- system/database/DB_driver.php | 28 ++++++++++++++-------- system/database/drivers/mssql/mssql_driver.php | 4 ++-- system/database/drivers/mysql/mysql_driver.php | 2 +- system/database/drivers/mysqli/mysqli_driver.php | 4 ++-- system/database/drivers/oci8/oci8_driver.php | 4 ++-- system/database/drivers/odbc/odbc_driver.php | 4 ++-- system/database/drivers/postgre/postgre_driver.php | 4 ++-- 7 files changed, 29 insertions(+), 21 deletions(-) (limited to 'system') diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php index 966fd3ad5..6b3a74b94 100644 --- a/system/database/DB_driver.php +++ b/system/database/DB_driver.php @@ -556,8 +556,8 @@ class CI_DB_driver { * @return string */ function compile_binds($sql, $binds) - { - if (FALSE === strpos($sql, $this->bind_marker)) + { + if (strpos($sql, $this->bind_marker) === FALSE) { return $sql; } @@ -567,17 +567,25 @@ class CI_DB_driver { $binds = array($binds); } - foreach ($binds as $val) + // Get the sql segments around the bind markers + $segments = explode($this->bind_marker, $sql); + + // The count of bind should be 1 less then the count of segments + // If there are more bind arguments trim it down + if (count($binds) >= count($segments)) { + $binds = array_slice($binds, 0, count($segments)-1); + } + + // Construct the binded query + $result = $segments[0]; + $i = 0; + foreach ($binds as $bind) { - $val = $this->escape($val); - - // Just in case the replacement string contains the bind - // character we'll temporarily replace it with a marker - $val = str_replace($this->bind_marker, '{%bind_marker%}', $val); - $sql = preg_replace("#".preg_quote($this->bind_marker, '#')."#", str_replace('$', '\$', $val), $sql, 1); + $result .= $this->escape($bind); + $result .= $segments[++$i]; } - return str_replace('{%bind_marker%}', $this->bind_marker, $sql); + return $result; } // -------------------------------------------------------------------- diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php index 8e12a2d21..7b024d414 100644 --- a/system/database/drivers/mssql/mssql_driver.php +++ b/system/database/drivers/mssql/mssql_driver.php @@ -408,9 +408,9 @@ class CI_DB_mssql_driver extends CI_DB { // I don't believe this is necessary with MS SQL. Not sure, though. - Rick /* - if (stristr($table, '.')) + if (strpos($table, '.') !== FALSE) { - $table = preg_replace("/\./", "`.`", $table); + $table = '"' . str_replace('.', '"."', $table) . '"'; } */ diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php index 372365aeb..edf09a170 100644 --- a/system/database/drivers/mysql/mysql_driver.php +++ b/system/database/drivers/mysql/mysql_driver.php @@ -418,7 +418,7 @@ class CI_DB_mysql_driver extends CI_DB { { if (strpos($table, '.') !== FALSE) { - $table = str_replace('.', '`.`', $table); + $table = '`' . str_replace('.', '`.`', $table) . '`'; } return $table; diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php index 31c27117c..dab56c7e7 100644 --- a/system/database/drivers/mysqli/mysqli_driver.php +++ b/system/database/drivers/mysqli/mysqli_driver.php @@ -410,9 +410,9 @@ class CI_DB_mysqli_driver extends CI_DB { */ function _escape_table($table) { - if (stristr($table, '.')) + if (strpos($table, '.') !== FALSE) { - $table = preg_replace("/\./", "`.`", $table); + $table = '`' . str_replace('.', '`.`', $table) . '`'; } return $table; diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php index 8f63c25a5..ec26f5be6 100644 --- a/system/database/drivers/oci8/oci8_driver.php +++ b/system/database/drivers/oci8/oci8_driver.php @@ -521,9 +521,9 @@ class CI_DB_oci8_driver extends CI_DB { */ function _escape_table($table) { - if (stristr($table, '.')) + if (strpos($table, '.') !== FALSE) { - $table = preg_replace("/\./", "`.`", $table); + $table = '"' . str_replace('.', '"."', $table) . '"'; } return $table; diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php index dd10fbdd3..fd2460853 100644 --- a/system/database/drivers/odbc/odbc_driver.php +++ b/system/database/drivers/odbc/odbc_driver.php @@ -386,9 +386,9 @@ class CI_DB_odbc_driver extends CI_DB { */ function _escape_table($table) { - if (stristr($table, '.')) + if (strpos($table, '.') !== FALSE) { - $table = preg_replace("/\./", "`.`", $table); + $table = '`' . str_replace('.', '`.`', $table) . '`'; } return $table; diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php index a32c37ed8..ce8cb258a 100644 --- a/system/database/drivers/postgre/postgre_driver.php +++ b/system/database/drivers/postgre/postgre_driver.php @@ -406,9 +406,9 @@ class CI_DB_postgre_driver extends CI_DB { */ function _escape_table($table) { - if (stristr($table, '.')) + if (strpos($table, '.') !== FALSE) { - $table = '"'.preg_replace("/\./", '"."', $table).'"'; + $table = '"' . str_replace('.', '"."', $table) . '"'; } return $table; -- cgit v1.2.3-24-g4f1b