PHP에서 작은따옴표가 포함된 데이터를 삽입할 때 MySQL 오류를 방지하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-01 16:25:02
원래의
576명이 탐색했습니다.

How to Avoid MySQL Errors When Inserting Data Containing Single Quotes in PHP?

PHP MySQL 삽입에서 작은따옴표 이스케이프

배경:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!