Maison >base de données >tutoriel mysql >Comment les instructions préparées peuvent-elles améliorer la sécurité et les performances dans les requêtes PHP UPDATE ?

Comment les instructions préparées peuvent-elles améliorer la sécurité et les performances dans les requêtes PHP UPDATE ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 16:29:02912parcourir

How can prepared statements enhance security and performance in PHP UPDATE queries?

Instructions préparées pour les requêtes de mise à jour

En PHP, la préparation des instructions est cruciale pour améliorer la sécurité et les performances des requêtes. Les instructions préparées permettent des requêtes paramétrées, où des espaces réservés (?) sont utilisés au lieu de l'insertion directe de variables.

Exemple de requêtes UPDATE

Considérez la requête mysqli suivante qui met à jour les données dans la table Candidat :

$db_usag->query("UPDATE Applicant SET phone_number ='$phone_number', 
street_name='$street_name', city='$city', county='$county', zip_code='$zip_code', day_date='$day_date', month_date='$month_date',
 year_date='$year_date' WHERE account_id='$account_id'");

Pour préparer cette instruction, remplacez toutes les affectations de variables par des espaces réservés :

<code class="php">$sql = "UPDATE Applicant SET phone_number=?, street_name=?, city=?, county=?, 
zip_code=?, day_date=?, month_date=?, year_date=? WHERE account_id=?";</code>

Ensuite, initialisez un objet d'instruction préparé :

<code class="php">$stmt = $db_usag->prepare($sql);</code>

Liez les paramètres à l'instruction à l'aide de la méthode bind_param(). Spécifiez les types de données des paramètres en conséquence :

<code class="php">// Assuming the date and account_id parameters are integers `d` and the rest are strings `s`
$stmt->bind_param('sssssdddd', $phone_number, $street_name, $city, $county, 
$zip_code, $day_date, $month_date, $year_date, $account_id);</code>

Exécutez l'instruction préparée :

<code class="php">$stmt->execute();</code>

Vérifiez les erreurs :

<code class="php">if ($stmt->error) {
    echo "FAILURE!!! " . $stmt->error;
}</code>

Si l'exécution a été réussi, récupérez le nombre de lignes affectées :

<code class="php">echo "Updated {$stmt->affected_rows} rows";</code>

Enfin, fermez l'objet instruction :

<code class="php">$stmt->close();</code>

En utilisant des instructions préparées, vous pouvez éviter les attaques par injection potentielles et améliorer l'efficacité de vos requêtes de base de donné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