2013-02-08 2 views
1

그래서 나는 MySQL 데이터베이스에 데이터를 저장하는 아주 간단한 응용 프로그램을 가지고 있습니다. 데이터는 PHP 파일에 게시되어 mysql_escape_string()에 래핑 된 다음 데이터베이스하나의 서버에서 문자를 이스케이프 처리 한 MySQL 저장 문자

php와 mysql을 실행하는 아파치를 로컬로 설치하면 잘 동작하지만 내 호스팅 계정에는 앞에 '\'가있는 '및 "문자가 저장됩니다. 두 데이터베이스 모두 동일한 latin1_swedish_ci 문자 집합을 사용하며 둘 다 동일한 버전을 실행합니다 MySQL의의 :..! 호스팅 제공 업체가 마법 따옴표가 PHP 환경에서 사용할 것을 분명히 다르게 행동하는 5.5.27하지만

나는, 그것은 가능성이 일 덕분에 @njk 댓글

+4

내 생각은 [마법 인용] (http://www.php.net/manual/en/security.magicquotes.what.php)입니다. 또한 mysql_ 함수의 사용을 중단해야한다. – Kermit

+0

@njk와 마찬가지로, mysql() *은 PHP 5.5.0부터 사용되지 않으며 [mysqli] (http://www.php.net/manual/en/book.mysqli.php) 또는 [PDO ] (http://www.php.net/manual/en/ref.pdo-mysql.php)를 참조하십시오. –

답변

2

에 딱하다 따라서 PHP 요청 매개 변수에는 이미 코드에서 볼 때까지 이스케이프 처리가 포함되어 있습니다. 그런 다음 이스케이프 문자 인 "\"에 이스케이프 처리를 적용하는 mysql_real_escape_string()을 사용합니다. 결과적으로 리터럴 "\"문자가 데이터베이스에 저장됩니다.

get_magic_quotes_gpc()을 검사하는 빠른 PHP 스크립트를 업로드하고 결과에 따라 "예"또는 "아니오"를 인쇄하여 호스팅 PHP 환경의 현재 설정을 확인할 수 있습니다. 보고서를 phpinfo()에서 확인할 수도 있습니다.

일반적으로 개발 환경을 호스팅 환경의 PHP 버전 및 PHP 설정과 일치시켜야 배포 할 때 동일하게 작동한다는 확신을 가지고 코드를 테스트 할 수 있습니다.

또 다른 해결책은 응용 프로그램을 작성하여 마법 인용 부호를 사용하는 경우 런타임에 조건부로 마법 부호를 실행 취소하는 것입니다. 그런 다음 평소와 마찬가지로 이스케이프 mysql을 적용합니다. 다음은 런타임에 마법 인용 부호를 실행 취소하는 PHP 코드 예제에 대한 링크입니다. http://php.net/manual/en/security.magicquotes.disabling.php

세 번째 조언은 호스팅 제공 업체를 전환하는 것입니다. 오래된 PHP를 사용하지 않는 훌륭한 개발자. 그 변명의 여지가 없다!

+0

당신은 맞았 어! 감사. php.ini에서 Magic Quotes를 사용하지 않고 완벽하게 작동했습니다. 어리석은 사람들이 기본적으로 남겨둔 고대의 것들에 대해서는 항상 잊어 버립니다. 하하하. – rcooper102

+0

새로운 호스트를 얻으십시오! ;-) –

+0

하, 클라이언트가 호스트를 제공했습니다. – rcooper102