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 ?
É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
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')");
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!