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!