From ba8a53a4f9a8b00bbf699d7c387e041f4c8ab528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Mon, 1 Jul 2013 08:50:51 +0200 Subject: [PATCH] MDL-40266 improve emulate_bound_params() for sqlsrv 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/mssql_native_moodle_database.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/dml/mssql_native_moodle_database.php b/lib/dml/mssql_native_moodle_database.php index 3191d5f0fd5..f9e980b7f2b 100644 --- a/lib/dml/mssql_native_moodle_database.php +++ b/lib/dml/mssql_native_moodle_database.php @@ -616,8 +616,8 @@ class mssql_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; @@ -642,7 +642,7 @@ class mssql_native_moodle_database extends moodle_database { $return .= "N'$param'"; } - $return .= array_shift($parts); + $return .= array_pop($parts); } return $return; }