使用 PHP 在 MySQL 中转义单引号
考虑以下场景,其中使用两个 SQL 语句来操作数据。第一条语句将表单中的信息插入数据库,而第二条语句从数据库检索数据、发送电子邮件并记录事务详细信息。
问题识别
当第二条语句由于名称字段中的单引号(例如“O'Brien”)而遇到错误时,就会出现问题。虽然第一个语句在没有转义该字符的情况下可以正常运行,但第二个语句会触发 MySQL 错误。这种差异可能会导致混乱。
根本原因
为了解决这个问题,重要的是要认识到 PHP 中的字符串在插入 MySQL 查询之前应该进行转义。 PHP 提供了 mysql_real_escape_string() 函数,可以有效地转义这些字符串,确保正确插入和防止错误。
魔术引号的影响
两个 SQL 之间的不同行为语句可归因于 PHP 的 magic_quotes_gpc 功能的潜在激活。此功能会自动转义从表单提交中获取的字符串(例如 $_POST),因此字符串“O'Brien”会转换为“O'Brien”。
当存储数据并随后检索数据时,数据库不执行任何自动转义。因此,检索到的字符串“O'Brien”包含未转义的单引号,因此在查询中使用时需要使用 mysql_real_escape_string() 进行适当的转义以防止错误。
转义注意事项
对 SQL 语句中使用的每个字符串进行转义至关重要,如以下修订版所示例如:
$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')");
通过一致应用这种转义机制,开发人员可以有效防止字符串中意外单引号引起的 MySQL 错误。
以上是如何防止PHP字符串中单引号引起的MySQL错误?的详细内容。更多信息请关注PHP中文网其他相关文章!