MDL-40266 improve emulate_bound_params() for mysqli
authorMartin Langhoff <martin.langhoff@remote-learner.net>
Wed, 12 Jun 2013 00:56:39 +0000 (20:56 -0400)
committerPetr Škoda <commits@skodak.org>
Sun, 30 Jun 2013 16:25:14 +0000 (18:25 +0200)
Looping over large numbers of items with array_shift() is expensive.
Reverse the array and fetch items from the top of the pile.

lib/dml/mysqli_native_moodle_database.php

index e819824..9d06809 100644 (file)
@@ -853,8 +853,8 @@ class mysqli_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;
@@ -868,7 +868,7 @@ class mysqli_native_moodle_database extends moodle_database {
                 $param = $this->mysqli->real_escape_string($param);
                 $return .= "'$param'";
             }
-            $return .= array_shift($parts);
+            $return .= array_pop($parts);
         }
         return $return;
     }