2014-10-28 2 views
1

개발 (localhost)에서 프로덕션으로 HTML 양식을 이동 중이며 초기 테스트에서 프로덕션 MySQL 데이터베이스에 나타나는 이스케이프 문자가 localhost 데이터베이스에 나타나지 않는 문제를 확인했습니다.MySQL에 나타나는 이스케이프 문자

양식 처리 파일에서 문자를 이스케이프 처리하기 위해 mysql_real_escape_string을 사용하고 있습니다. 로컬 호스트 데이터베이스에서 이러한 문자가 올바르게 저장되며 아포스트로피 또는 따옴표 만 있으면됩니다.

그러나 프로덕션으로 이동하면 양식은 여전히 ​​올바르게 처리되지만 데이터베이스 레코드에는 아포스트로피 또는 따옴표 기호 앞에 백 슬래시 이스케이프 문자가 표시됩니다. 레코드가 인쇄되면 백래시가 나타나고 이는 허용되지 않습니다.

로컬 호스트와 프로덕션이 다른 버전의 MySQL을 실행하고있는 경우 (localhost는 5.5.24-log를 실행하고 프로덕션은 5.0.95-log를 실행 중임)를 제외하면 다른 점은 없습니다. 나는 그것이 ISP에 의해 관리되는 것처럼 생산 버전에 대한 통제권이 없다. 그래서 이것이 문제가되지 않기를 바란다.

희망적으로 말이 되겠습니까? 어떤 도움이라도 대단히 감사합니다.

+3

[mysql_ *'functions] (http://stackoverflow.com/questions/12859942/why-shouldnt-use-mysql-functions-in-php)를 사용하지 마십시오. 더 이상 사용하지 않습니다. (공식적으로 권장되지 않음) (https://wiki.php.net/rfc/mysql_deprecation). 대신 [prepared statements] (http://en.wikipedia.org/wiki/Prepared_statement)에 대해 알아보고 [PDO] (http://us1.php.net/pdo) 또는 [MySQLi] (http : //)를 사용하십시오. us1.php.net/mysqli). [이 기사] (http://php.net/manual/en/mysqlinfo.api.choosing.php)를 사용하면 결정하는 데 도움이됩니다. –

+0

PHP 구성을 확인 했습니까? –

+1

'stripslashes()'에 추가하거나 준비된 문장으로 얻으십시오. –

답변

1

위해서 stripslashes을 사용하고 이에 대한 솔루션(), 당신은 어떤 또한 것, 사용자 입력 및 데이터베이스를 다루는 가장 좋은 방법이다 준비된 문을 사용하여 시작할 수있는 대안으로 출력

$text = "Don\'t use mysql_* and use mysqli or PDO instead"; 
echo stripslashes($text); // would echo it out without the backslash 

를 표시하기 전에 모든 따옴표를 빠져 나가야하고, 백 슬래시를 표시하기 전에이를 제거해야하는 번거 로움을 덜어줍니다.

+0

임시 솔루션을 이용해 주셔서 감사 드리며,이 사용 사례에 대해서는 문제가 없으며 향후 프로젝트를 위해 준비된 진술을 조사 할 것입니다. – Hank