Échapper aux guillemets simples en PHP pour MySQL
Vous avez rencontré un problème où un guillemet simple provoque une erreur MySQL lors de l'insertion de données dans une base de données. Ce problème survient lorsque les données ne sont pas correctement échappées avant d'être insérées.
Dans la première requête, l'échappement n'est pas nécessaire car vous insérez des données directement à partir d'un formulaire. Cependant, la deuxième requête récupère les données d'un enregistrement précédemment inséré et tente de les insérer dans une nouvelle table. Étant donné que les données peuvent contenir des guillemets simples non échappés, cela déclenche une erreur MySQL.
Pour éviter cette erreur, vous pouvez utiliser la fonction mysql_real_escape_string() pour échapper toutes les chaînes avant de les insérer dans la base de données. Cette fonction convertit les caractères spéciaux tels que les guillemets simples en leurs équivalents avec échappement, les empêchant ainsi de provoquer des erreurs.
Par exemple, dans la requête 2, remplacez la ligne suivante :
<code class="php">$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', '$message_content', '1')");</code>
Par :
<code class="php">$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', '".mysql_real_escape_string(date('Y-m-d H:i:s', time()))."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($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')");</code>
En échappant toutes les chaînes de cette manière, vous pouvez empêcher les guillemets simples de provoquer des erreurs MySQL et garantir que les données sont insérées correctement.
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!