Maison >base de données >tutoriel mysql >Comment mettre à jour efficacement plusieurs enregistrements MySQL à l'aide d'un tableau d'entiers en PHP ?
Comment utiliser un tableau d'entiers dans des requêtes MySQL (PHP)
Problème :
Vous avez besoin d'un moyen d'utiliser un tableau d'ID d'éléments de contenu aléatoires dans une requête MySQL, chaque ID étant placé dans la clause WHERE dans l'ordre de son apparition dans le tableau. Cette requête doit être une MISE À JOUR pour chaque ID individuel du tableau.
Solution :
L'utilisation d'instructions préparées pour les opérations SQL dans PHP est fortement recommandée. Les instructions préparées offrent une sécurité accrue en empêchant les attaques par injection SQL et en améliorant l'efficacité grâce à la compilation des instructions de base de données. Deux approches que vous pouvez envisager sont :
Approche itérative :
$ids = array(2, 4, 6, 8); $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?"; $stmt = $mysqli->prepare($sql); for ($i = 0; $i < count($ids); $i++) { $stmt->bind_param("i", $ids[$i]); $stmt->execute(); echo "Updated record ID: $id\n"; } $stmt->close();
Approche à exécution unique :
$ids = array(2, 4, 6, 8); $params = implode(",", array_fill(0, count($ids), "?")); $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)"; $stmt = $mysqli->prepare($sql); $types = str_repeat("i", count($ids)); // "iiii" $args = array_merge(array($types), $ids); // ["iiii", 2, 4, 6, 8] call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8) $stmt->execute(); $stmt->close(); echo "Updated record IDs: " . implode("," $ids) ."\n";
Pour les champs supplémentaires que vous devez ajouter, ajoutez simplement plus d'espaces réservés de paramètres au SQL
Quelle approche choisir :
Avantages des instructions préparé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!