Maison  >  Article  >  développement back-end  >  Comment utiliser les instructions préparées PHP pour les mises à jour sécurisées de la base de données ?

Comment utiliser les instructions préparées PHP pour les mises à jour sécurisées de la base de données ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 19:58:29140parcourir

How to Use PHP Prepared Statements for Secure Database Updates?

Instructions préparées PHP pour des mises à jour sécurisées de la base de données

Éviter les injections SQL

Lors de l'exécution de requêtes de base de données, les instructions préparées sont essentielles pour empêcher les injections SQL. Ils vous permettent d'insérer dynamiquement des données dans des requêtes sans compromettre la sécurité.

Mise à jour d'un seul champ

Dans votre extrait de code, vous ne mettez à jour qu'un seul champ : le contenu. Ceci est acceptable car vous pouvez mettre à jour de manière sélective des colonnes individuelles dans une instruction UPDATE.

Liaison appropriée des paramètres

Pour lier correctement les paramètres dans une instruction préparée, il est essentiel de s'assurer que les types de données dans votre code correspondent aux types de données dans votre instruction MySQL. Dans votre cas, vous avez :

<code class="php">$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
$stmt->bind_param('is', $id, $content);</code>

Le 'is' dans la méthode bind_param() spécifie que vous liez un entier (i) et une ou plusieurs chaînes. Cependant, vous utilisez en fait le code suivant pour définir la variable de contenu :

<code class="php">$content = isset($_POST['content']) ? $this->mysqli->real_escape_string($_POST['content']) : '';</code>

Qui renvoie une chaîne. Cette incompatibilité peut entraîner des erreurs.

Corrections :

Pour corriger le problème, apportez les modifications suivantes :

<code class="php">if ($stmt === false) {
  trigger_error($this->mysqli->error, E_USER_ERROR);
  return;
}

$content = $_POST['content'] ?: '';
$stmt->bind_param('si', $content, $id);
````
**Additional Notes:**

* Always remember to check for statement preparation errors using `if ($stmt === false)`.
* Bind your parameters in the same order as they appear in your SQL statement.

**Troubleshooting:**

If you're still facing issues, ensure that:

* Your MySQL connection is established correctly.
* The table and column names in your statement are spelled correctly.</code>

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