Instruction préparée PHP pour les mises à jour de bases de données
Cette discussion est centrée sur l'utilisation appropriée des instructions préparées en PHP pour éviter les vulnérabilités telles que les injections SQL. Le but du bloc de code en question est de mettre à jour une table de base de données avec un seul champ à l'aide d'une instruction préparée.
Dans le code fourni, la méthode update() dans le fichier class.Scripts.inc utilise une instruction préparée. instruction pour tenter de mettre à jour la table datadump. Cependant, l'exécution échoue en raison d'un ordre incorrect des paramètres lors de la méthode bind_param(). Le code actuel lie les paramètres dans l'ordre $id et $content, tandis que l'instruction SQL les attend dans l'ordre opposé, ce qui entraîne une identification incorrecte des enregistrements et zéro ligne affectée.
Le code corrigé ci-dessous corrige ce problème. erreur en liant les paramètres dans le bon ordre et en fournissant une gestion supplémentaire des erreurs :
<code class="php">$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?"); /* Always check whether the prepare() succeeded */ if ($stmt === false) { trigger_error($this->mysqli->error, E_USER_ERROR); return; } $id = 1; /* Bind our params */ /* Bind variables in the same order as SQL params */ $stmt->bind_param('si', $content, $id); /* Set our params */ /* No escaping needed when using prepared statements */ $content = $_POST['content'] ?: ''; /* Execute the prepared Statement */ $status = $stmt->execute(); /* Always check whether the execute() succeeded */ if ($status === false) { trigger_error($stmt->error, E_USER_ERROR); } printf("%d Row inserted.\n", $stmt->affected_rows);</code>
Concernant vos demandes spécifiques :
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!