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