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)
committerDan Poltawski <dan@moodle.com>
Tue, 2 Jul 2013 01:56:17 +0000 (09:56 +0800)
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 21404d7..c18050e 100644 (file)
@@ -814,8 +814,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;
@@ -829,7 +829,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;
     }