summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerek Allard <derek.allard@ellislab.com>2008-02-11 06:54:44 +0100
committerDerek Allard <derek.allard@ellislab.com>2008-02-11 06:54:44 +0100
commitc0743381b20910a3fc23b391e8b2009ac5771ae8 (patch)
treed456d728a363a11f3b634a128fcbf5fb61331d64
parent70529a739dd0a73fc72124720390313d8a8b0dca (diff)
database enhancements, compatibility additions and bugfixes
-rw-r--r--system/database/DB_driver.php28
-rw-r--r--system/database/drivers/mssql/mssql_driver.php4
-rw-r--r--system/database/drivers/mysql/mysql_driver.php2
-rw-r--r--system/database/drivers/mysqli/mysqli_driver.php4
-rw-r--r--system/database/drivers/oci8/oci8_driver.php4
-rw-r--r--system/database/drivers/odbc/odbc_driver.php4
-rw-r--r--system/database/drivers/postgre/postgre_driver.php4
7 files changed, 29 insertions, 21 deletions
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;