Maison > base de données > tutoriel mysql > Comment puis-je échapper correctement aux guillemets simples en PHP pour éviter les erreurs de requête MySQL ?

Comment puis-je échapper correctement aux guillemets simples en PHP pour éviter les erreurs de requête MySQL ?

Barbara Streisand
Libérer: 2024-12-18 16:51:10
original
801 Les gens l'ont consulté

How Can I Properly Escape Single Quotes in PHP to Prevent MySQL Query Errors?

Échapper aux guillemets simples en PHP pour les requêtes MySQL

Comprendre le problème

Lors de la tentative d'insertion de données dans MySQL à l'aide de PHP , un guillemet simple peut provoquer une erreur dans les requêtes ultérieures qui accèdent aux données insérées. Bien que la première requête semble fonctionner correctement, la deuxième requête génère une erreur MySQL si les données contiennent un guillemet simple.

Résoudre le problème

La solution est de échappez aux guillemets simples dans les chaînes insérées à l'aide de la fonction mysql_real_escape_string(). Cette fonction remplace les guillemets simples par leurs équivalents échappés ('), garantissant qu'ils sont interprétés comme des caractères littéraux plutôt que comme faisant partie de la syntaxe de la requête.

Raison de la disparité

La raison pour laquelle les deux requêtes se comportent différemment est probablement due au réglage du paramètre de configuration magic_quotes_gpc. Lorsque ce paramètre est activé, les chaînes obtenues à partir de $_GET, $_POST et $_COOKIES sont automatiquement échappées, y compris les guillemets simples.

Cependant, une fois les données stockées dans la base de données et récupérées à nouveau, elles ne seront plus s'est automatiquement échappé. Par conséquent, lorsque la deuxième requête tente d'accéder aux données, elle rencontre des guillemets simples qui ne sont pas échappés et déclenche une erreur.

Requêtes révisées

Pour résoudre le problème, échappez aux guillemets simples dans les deux requêtes en utilisant mysql_real_escape_string() :

$result = mysql_query("INSERT INTO job_log
(order_id, supplier_id, category_id, service_id, qty_ordered, customer_id, user_id, salesperson_ref, booking_ref, booking_name, address, suburb, postcode, state_id, region_id, email, phone, phone2, mobile, delivery_date, stock_taken, special_instructions, cost_price, cost_price_gst, sell_price, sell_price_gst, ext_sell_price, retail_customer, created, modified, log_status_id)
VALUES
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', mysql_real_escape_string('$booking_name'), mysql_real_escape_string('$address'), mysql_real_escape_string('$suburb'), mysql_real_escape_string('$postcode'), '$state_id', '$region_id', mysql_real_escape_string('$email'), mysql_real_escape_string('$phone'), mysql_real_escape_string('$phone2'), mysql_real_escape_string('$mobile'), STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', mysql_real_escape_string('$special_instructions'), '$cost_price', '$cost_price_gst', '$sell_price', '$sell_price_gst', '$ext_sell_price', '$retail_customer', '".date('Y-m-d H:i:s', time())."', '".date('Y-m-d H:i:s', time())."', '1')");
Copier après la connexion
$query = mysql_query("INSERT INTO message_log
(order_id, timestamp, message_type, email_from, supplier_id, primary_contact, secondary_contact, subject, message_content, status)
VALUES
('$order_id', '".date('Y-m-d H:i:s', time())."', '$email', mysql_real_escape_string('$from'), '$row->supplier_id', mysql_real_escape_string('$row->primary_email') ,mysql_real_escape_string('$row->secondary_email'), mysql_real_escape_string('$subject'), mysql_real_escape_string('$message_content'), '1')");
Copier après la connexion

By en échappant aux guillemets simples, les deux requêtes traiteront désormais correctement les données contenant des guillemets simples sans provoquer d'erreurs MySQL.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal