Maison >développement back-end >tutoriel 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 ?

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 ?

DDD
DDDoriginal
2024-10-21 20:06:29774parcourir

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

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 :

  1. Le message « 0 lignes insérées » 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.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn