"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment résoudre l'ordre incorrect des paramètres dans les mises à jour de la base de données des instructions préparées PHP ?

Comment résoudre l'ordre incorrect des paramètres dans les mises à jour de la base de données des instructions préparées PHP ?

Publié le 2024-11-08
Parcourir:383

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

Instruction préparée PHP pour les mises à jour de base 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 aucune 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 :

$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);

Concernant vos demandes spécifiques :

  1. Le message "0 Rows Inserted" que vous avez rencontré est dû à l’ordre des paramètres inversé. Les paramètres id et content étaient liés dans un ordre incorrect, ce qui faisait que la clause WHERE ne correspondait à aucune ligne.
  2. Lors de la mise à jour d'une table, il est acceptable de modifier uniquement les champs dont vous avez besoin. Les autres colonnes du tableau resteront inchangées.
Déclaration de sortie Cet article est réimprimé à l'adresse : 1729512196. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3