> 데이터 베이스 > MySQL 튜토리얼 > PHP 문자열의 작은따옴표로 인해 발생하는 MySQL 오류를 어떻게 방지할 수 있습니까?

PHP 문자열의 작은따옴표로 인해 발생하는 MySQL 오류를 어떻게 방지할 수 있습니까?

DDD
풀어 주다: 2024-12-07 11:11:13
원래의
571명이 탐색했습니다.

How Can I Prevent MySQL Errors Caused by Single Quotes in PHP Strings?

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

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