Maison >base de données >tutoriel mysql >Comment puis-je éviter les erreurs MySQL causées par des guillemets simples dans les chaînes PHP ?
Échapper aux guillemets simples dans MySQL avec PHP
Considérez le scénario suivant dans lequel deux instructions SQL sont utilisées pour manipuler des données. La première instruction insère les informations d'un formulaire dans une base de données, tandis que la seconde récupère les données de la base de données, envoie un e-mail et enregistre les détails de la transaction.
Identification du problème
Le problème survient lorsque la deuxième instruction rencontre une erreur due à un guillemet simple dans un champ de nom, tel que « O'Brien ». Alors que la première instruction fonctionne correctement sans échapper à ce caractère, la deuxième instruction déclenche une erreur MySQL. Cette disparité peut prêter à confusion.
Cause fondamentale
Pour résoudre ce problème, il est crucial de reconnaître que les chaînes en PHP doivent être échappées avant de les insérer dans les requêtes MySQL. . PHP propose la fonction mysql_real_escape_string() qui échappe efficacement à ces chaînes, garantissant une insertion correcte et une prévention des erreurs.
L'impact des citations magiques
Le comportement différent entre les deux SQL Les déclarations peuvent être attribuées à l'activation potentielle de la fonctionnalité magic_quotes_gpc de PHP. Cette fonctionnalité échappe automatiquement aux chaînes acquises lors des soumissions de formulaires (par exemple, $_POST), de sorte que la chaîne "O'Brien" est transformée en "O'Brien".
Lorsque les données sont stockées puis récupérées, la base de données n'effectue aucun échappement automatique. Par conséquent, la chaîne récupérée "O'Brien" contient le guillemet simple non échappé, ce qui nécessite un échappement approprié avec mysql_real_escape_string() lorsqu'il est utilisé dans des requêtes pour éviter les erreurs.
Considérations sur l'échappement
Il est essentiel d'échapper à chaque chaîne utilisée dans les instructions SQL, comme le démontre la version révisée suivante exemple :
$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', '$row->primary_email' ,'$row->secondary_email', '$subject', '".mysql_real_escape_string($message_content)."', '1')");
En appliquant systématiquement ce mécanisme d'échappement, les développeurs peuvent empêcher efficacement les erreurs MySQL causées par des guillemets simples inattendus dans les chaînes.
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!