Maison  >  Article  >  développement back-end  >  Comment éviter les erreurs MySQL lors de l'insertion de données contenant des guillemets simples en PHP ?

Comment éviter les erreurs MySQL lors de l'insertion de données contenant des guillemets simples en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 16:25:02577parcourir

How to Avoid MySQL Errors When Inserting Data Containing Single Quotes in PHP?

Échapper aux guillemets simples dans les insertions PHP MySQL

Contexte :

Les requêtes MySQL impliquent l'utilisation de chaînes pouvant contenir des caractères spéciaux, comme les guillemets simples. Ces caractères spéciaux doivent être échappés pour éviter que MySQL ne les interprète mal dans le cadre de la requête.

Problème :

Un développeur rencontre un problème lors de l'insertion de données dans une base de données MySQL échoue en raison d'un guillemet simple déclenchant une erreur MySQL. Le problème se produit dans une deuxième requête où les données sont récupérées de la base de données et utilisées dans un modèle d'e-mail.

Cause et solution :

Le coupable est le manque de s'échapper lors de l'insertion de données dans MySQL. La deuxième requête récupère les données de la base de données, qui peuvent inclure des guillemets simples. Ces guillemets simples ne sont pas échappés lorsqu'ils sont utilisés dans le modèle d'e-mail, ce qui entraîne l'erreur MySQL.

Pour résoudre ce problème, utilisez mysql_real_escape_string() pour échapper toutes les chaînes avant de les insérer dans MySQL. Cette fonction échappe aux caractères spéciaux, y compris les guillemets simples. En utilisant cette fonction, les deux requêtes fonctionneront correctement, quelle que soit la présence de guillemets simples dans les données.

<code class="php">$escaped_order_id = mysql_real_escape_string($order_id);
$escaped_message_content = mysql_real_escape_string($message_content);

$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
('$escaped_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', '$email', '$phone', '$phone2', '$mobile', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '$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
('$escaped_order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '$escaped_message_content', '1')");</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