In MySQLi, it is desirable to bind parameters to prevent SQL injection and optimize performance. However, if some POST parameters are empty, it becomes necessary to handle them separately.
One possible approach is to use the call_user_func_array function to call the bind_param method with a variable number of arguments. This allows us to dynamically construct the query string and bind parameters only for non-empty values.
Here's an example:
<code class="php">$paramNames = array('myvar1', 'myvar2', /* ... */); $params = array(); foreach ($paramNames as $name) { if (isset($_POST[$name]) && $_POST[$name] != '') { $params[$name] = $_POST[$name]; } } if (count($params)) { $query = 'UPDATE mytable SET '; foreach ($params as $name => $val) { $query .= $name.'=?,'; } $query = substr($query, 0, -1); $query .= 'WHERE id = ?'; $stmt = $mysqli->prepare($query); $params = array_merge(array(str_repeat('s', count($params))), array_values($params)); call_user_func_array(array(&$stmt, 'bind_param'), $params); }</code>
This code loops through the POST parameters, checks if they are set and not empty, and adds them to an array. It then dynamically builds the query string with non-empty parameters and binds the values using call_user_func_array.
By handling empty POST parameters separately, we can achieve variable input binding in MySQLi, ensuring that only valid data is updated in the database and avoiding unnecessary updates. It is a versatile and flexible solution that can accommodate a variety of input combinations.
The above is the detailed content of How to Achieve Variable Input Binding in MySQLi with Empty POST Parameters?. For more information, please follow other related articles on the PHP Chinese website!