Dans MySQLi, il est souhaitable de lier des paramètres pour empêcher l'injection SQL et optimiser les performances. Cependant, si certains paramètres POST sont vides, il devient nécessaire de les gérer séparément.
Une approche possible consiste à utiliser la fonction call_user_func_array pour appeler la méthode bind_param avec un nombre variable d'arguments. Cela nous permet de construire dynamiquement la chaîne de requête et de lier les paramètres uniquement pour les valeurs non vides.
Voici un exemple :
<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>
Ce code parcourt les paramètres POST, vérifie s'ils sont défini et non vide, et les ajoute à un tableau. Il construit ensuite dynamiquement la chaîne de requête avec des paramètres non vides et lie les valeurs à l'aide de call_user_func_array.
En gérant séparément les paramètres POST vides, nous pouvons réaliser une liaison d'entrée variable dans MySQLi, garantissant que seules les données valides sont mises à jour dans le base de données et en évitant les mises à jour inutiles. Il s'agit d'une solution polyvalente et flexible qui peut s'adapter à une variété de combinaisons d'entrées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!