Maison > base de données > tutoriel mysql > Pourquoi mes insertions PHP MySQL échouent-elles de manière incohérente lors de la gestion des guillemets simples ?

Pourquoi mes insertions PHP MySQL échouent-elles de manière incohérente lors de la gestion des guillemets simples ?

DDD
Libérer: 2024-12-02 07:16:12
original
764 Les gens l'ont consulté

Why Do My PHP MySQL Inserts Fail Inconsistently When Handling Single Quotes?

Échapper aux guillemets simples dans les insertions PHP MySQL : une plongée plus approfondie dans l'exécution des requêtes

Lors de l'insertion de données dans une base de données MySQL, il est crucial de s'assurer la gestion correcte des guillemets simples ('). Cependant, les développeurs rencontrent parfois une situation inexplicable dans laquelle une requête échoue en raison d'un guillemet simple dans la deuxième insertion, alors que la première réussit de manière transparente.

Dans ces scénarios, il est essentiel de comprendre les raisons potentielles de ce comportement incohérent. . Bien que les informations saisies dans les formulaires soient souvent représentées sous forme de chaînes, il est important de prendre en compte les éléments suivants :

Exécution de requêtes et citations magiques

  • Requête 1 : Cette requête fonctionne sans échapper au guillemet simple car le paramètre PHP magic_quotes_gpc est activé. Ce paramètre échappe automatiquement les chaînes obtenues à partir des entrées du formulaire ($_GET, $_POST, $_COOKIES).
  • Requête 2 : lorsque magic_quotes_gpc est activé, les données stockées ne sont pas échappées, ce qui les rend susceptibles de conflits avec les guillemets simples. Par conséquent, la requête échoue avec mysql_error() lorsqu'un guillemet simple est rencontré.

S'échapper avec mysql_real_escape_string()

La solution réside dans l'utilisation de mysql_real_escape_string( ) pour échapper de manière appropriée toutes les chaînes, quel que soit le paramètre magic_quotes_gpc. Cette fonction prépare les chaînes à insérer dans MySQL, empêchant les caractères malveillants d'interférer avec la base de données. En incorporant cette fonction dans les deux requêtes, les incohérences peuvent être résolues :

$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', '$booking_name', '$address', '$suburb', '$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')");

$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', '$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

Avec cette modification, les deux requêtes fonctionneront correctement même lorsqu'elles rencontreront des guillemets simples dans les données, garantissant des interactions cohérentes avec la 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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal