> 데이터 베이스 > MySQL 튜토리얼 > MySQL 쿼리 오류를 방지하기 위해 PHP에서 작은따옴표를 올바르게 이스케이프하려면 어떻게 해야 합니까?

MySQL 쿼리 오류를 방지하기 위해 PHP에서 작은따옴표를 올바르게 이스케이프하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-12-18 16:51:10
원래의
801명이 탐색했습니다.

How Can I Properly Escape Single Quotes in PHP to Prevent MySQL Query Errors?

MySQL 쿼리를 위해 PHP에서 작은따옴표 이스케이프

문제 이해

PHP를 사용하여 MySQL에 데이터를 삽입하려고 할 때 , 작은따옴표 문자는 삽입된 데이터에 액세스하는 후속 쿼리에서 오류를 일으킬 수 있습니다. 첫 번째 쿼리는 제대로 작동하는 것처럼 보이지만 두 번째 쿼리에서는 데이터에 작은따옴표가 포함된 경우 MySQL 오류가 발생합니다.

문제 해결

해결책은 다음과 같습니다. mysql_real_escape_string() 함수를 사용하여 삽입된 문자열에서 작은따옴표 문자를 이스케이프합니다. 이 함수는 작은따옴표를 이스케이프된 대응 문자(')로 대체하여 쿼리 구문의 일부가 아닌 리터럴 문자로 해석되도록 합니다.

차이가 발생하는 이유

두 쿼리가 다르게 동작하는 이유는 Magic_quotes_gpc 구성 매개변수의 설정 때문일 가능성이 높습니다. 이 설정이 활성화되면 $_GET, $_POST 및 $_COOKIES에서 얻은 문자열이 작은따옴표를 포함하여 자동으로 이스케이프됩니다.

그러나 일단 데이터가 데이터베이스에 저장되고 다시 검색되면 해당 문자열은 자동으로 이스케이프됩니다. 자동으로 탈출했습니다. 따라서 두 번째 쿼리에서 데이터에 액세스하려고 하면 이스케이프되지 않은 작은따옴표가 발견되어 오류가 발생합니다.

수정된 쿼리

문제를 해결하려면, 다음을 사용하여 두 쿼리 모두에서 작은따옴표를 이스케이프 처리합니다. mysql_real_escape_string():

$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
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', mysql_real_escape_string('$booking_name'), mysql_real_escape_string('$address'), mysql_real_escape_string('$suburb'), mysql_real_escape_string('$postcode'), '$state_id', '$region_id', mysql_real_escape_string('$email'), mysql_real_escape_string('$phone'), mysql_real_escape_string('$phone2'), mysql_real_escape_string('$mobile'), STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', mysql_real_escape_string('$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
('$order_id', '".date('Y-m-d H:i:s', time())."', '$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')");
로그인 후 복사

작은따옴표를 이스케이프 처리하면 두 쿼리 모두 이제 MySQL 오류 없이 작은따옴표가 포함된 데이터를 올바르게 처리합니다.

위 내용은 MySQL 쿼리 오류를 방지하기 위해 PHP에서 작은따옴표를 올바르게 이스케이프하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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