I propose to add, contrary to the mysqli::bind_param method which accepts 
parameters only by ref (and triggers a fatal error when passing non-ref 
variables or values), a mysqli::bind_value method which accepts the variables 
by value.

There are a few problems when using bind_param which bind_value tries to solve:

a) When you aren't binding in a small scope, you have to make attention to not 
reusing the variable before execute()'ing the mysqli_stmt instance.
b) You have to pass values per reference, so that you cannot do for example in 
a function:
          call_user_func_array([$stmt, "bind_param"], 
array_merge([str_repeat("s", func_num_args())], func_get_args()));
     this would fail in a message you couldn't pass them by value (when you 
cannot write the function expecting references as variable for some reason). A 
workaround would be to array_walk the array and pass the variable by ref to a 
new array, which is not really handy.
c) When you try to pass raw values instead of a reference, it results in a 
"Fatal error:  Cannot pass parameter 2 by reference".   
d) Executing $stmt->bind_param("s", $a?$b:$c); would result in a "Strict 
Standards: Only variables should be passed by reference". Yeah, it's only a 
strict error, but I think it's best practice to code error free...

For c) and d): Yes, you could assign the result / raw value to a variable and 
then pass it to the function, but this are only a variable more, a code line 
more and a fraction of a nanosecond more (microoptimization, I just wanted to 
say it).

The PR for this request is at: https://github.com/php/php-src/pull/338

Bob


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to