summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Regad <dregad@mantisbt.org>2015-12-16 00:42:26 +0100
committerDamien Regad <dregad@mantisbt.org>2015-12-16 01:26:52 +0100
commitc32f1525136ff3afcf1e3ed30a17818b1bcd1731 (patch)
treeba4c20b65c0d1d7a3fb29a825ba240323cb4dcd7
parentbdeb28f214c29a54a88cef995e251702f7181ab7 (diff)
downloadadodb-c32f1525136ff3afcf1e3ed30a17818b1bcd1731.tar.gz
adodb-c32f1525136ff3afcf1e3ed30a17818b1bcd1731.tar.bz2
adodb-c32f1525136ff3afcf1e3ed30a17818b1bcd1731.zip
Better replacement for preg_replace '/e' flag
Instead of creating an anonymous function, modify the existing _colontrack() function to be used as the callback Fixes #168
-rw-r--r--drivers/adodb-db2ora.inc.php19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/adodb-db2ora.inc.php b/drivers/adodb-db2ora.inc.php
index ce035800..70440872 100644
--- a/drivers/adodb-db2ora.inc.php
+++ b/drivers/adodb-db2ora.inc.php
@@ -22,15 +22,26 @@ if (!defined('ADODB_DB2OCI')){
define('ADODB_DB2OCI',1);
+/**
+ * Callback function for preg_replace in _colonscope()
+ * @param array $p matched patterns
+ * return string '?' if parameter replaced, :N if not
+ */
function _colontrack($p)
{
-global $_COLONARR,$_COLONSZ;
- $v = (integer) substr($p,1);
- if ($v > $_COLONSZ) return $p;
+ global $_COLONARR, $_COLONSZ;
+ $v = (integer) substr($p[1], 1);
+ if ($v > $_COLONSZ) return $p[1];
$_COLONARR[] = $v;
return '?';
}
+/**
+ * smart remapping of :0, :1 bind vars to ? ?
+ * @param string $sql SQL statement
+ * @param array $arr parameters
+ * @return array
+ */
function _colonscope($sql,$arr)
{
global $_COLONARR,$_COLONSZ;
@@ -38,7 +49,7 @@ global $_COLONARR,$_COLONSZ;
$_COLONARR = array();
$_COLONSZ = sizeof($arr);
- $sql2 = preg_replace_callback('/(:[0-9]+)/', create_function('$m', 'return _colontrack($m[0]);'), $sql);
+ $sql2 = preg_replace_callback('/(:[0-9]+)/', '_colontrack', $sql);
if (empty($_COLONARR)) return array($sql,$arr);