From 7aed7f46abf8a298010381199846cf66cffa9f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Mon, 1 Jul 2013 08:52:03 +0200 Subject: [PATCH] MDL-40266 improve emulate_bound_params() for mssql driver Looping over large numbers of items with array_shift() is expensive. Reverse the array and fetch items from the top of the pile. Credit goes to Martin Langhoff for original mysqli fix. --- lib/dml/sqlsrv_native_moodle_database.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/dml/sqlsrv_native_moodle_database.php b/lib/dml/sqlsrv_native_moodle_database.php index f5992b46f26..af3697bebcd 100644 --- a/lib/dml/sqlsrv_native_moodle_database.php +++ b/lib/dml/sqlsrv_native_moodle_database.php @@ -709,8 +709,8 @@ class sqlsrv_native_moodle_database extends moodle_database { return $sql; } // ok, we have verified sql statement with ? and correct number of params - $parts = explode('?', $sql); - $return = array_shift($parts); + $parts = array_reverse(explode('?', $sql)); + $return = array_pop($parts); foreach ($params as $param) { if (is_bool($param)) { $return .= (int)$param; @@ -730,7 +730,7 @@ class sqlsrv_native_moodle_database extends moodle_database { $return .= "N'$param'"; } - $return .= array_shift($parts); + $return .= array_pop($parts); } return $return; }