背景:
MySQL 查詢涉及使用可能包含特殊字元的字元串,例如單引號。必須對這些特殊字元進行轉義,以防止 MySQL 將它們誤解為查詢的一部分。
問題:
開發人員在將資料插入 MySQL 資料庫時遇到問題由於單引號觸發 MySQL 錯誤而失敗。該問題發生在第二個查詢中,其中從資料庫檢索資料並在電子郵件範本中使用資料。
原因與解決方案:
罪魁禍首是缺乏適當的將資料插入 MySQL 時轉義。第二個查詢從資料庫中檢索數據,其中可能包含單引號。這些單引號在電子郵件範本中使用時不會轉義,導致 MySQL 錯誤。
要解決此問題,請在將所有字串插入 MySQL 之前使用 mysql_real_escape_string() 對所有字串進行轉義。此函數轉義特殊字符,包括單引號。透過使用此函數,無論資料中是否存在單引號,兩個查詢都將正確運行。
<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>
以上是PHP插入包含單引號的資料時如何避免MySQL錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!