MDL-40266 improve emulate_bound_params() for sqlsrv driver
authorPetr Škoda <commits@skodak.org>
Mon, 1 Jul 2013 06:50:51 +0000 (08:50 +0200)
committerDan Poltawski <dan@moodle.com>
Tue, 2 Jul 2013 05:33:38 +0000 (13:33 +0800)
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

index 6c85715..d105b52 100644 (file)
@@ -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;
     }