2012-06-19 2 views
0

이상한 상황에 있는데, DB에 문자열을 넣을 때 mysql_real_escape_string으로 출력하면 모든 것이 정상이며 mysql이 자동 stripslashes를 만든 것처럼 보입니다! 예를 들어, 나는 tes't을 저장하고 다음을 인쇄하십시오 : tes't하지만 php 4.2가 설치된 localhost에 동일한 코드로 tes\'t을 입력하십시오. mysql의 수수께끼는 뭐니? 한 번 영원히 한 번, 안전하고 깨끗한 데이터베이스에 데이터를 삽입하고 선택해야한다는 것을 알고 싶습니다! 왜냐하면 그것은 내가 정말로 혼란스럽게 만들었 기 때문입니다! 그것은 PHP의 마법에 가능성이 따라db에서 내용을 선택할 때 mysql 자동 stripslashes?

+0

PHP 4.2? 아야. 그것은 수십 년 전의 것이며 더 이상 지원되지 않습니다. 평범한 MySQL 확장 대신에 PDO 나 MySQLi를 사용하라고 말했을 것입니다 (따옴표를 이스케이프하지 않고 준비된 명령문을 사용할 수는 있지만) PHP 5가 필요합니다. 가능하면 업그레이드해야합니다. :-) – Wiseguy

+0

나중에 테스트와 실험실을 위해서 ;-) – Vahid

+0

내가 새 집을 만들고 싶다면 나는 망치 대신에 조잡한 모양의 클럽을 사용할 수 있었지만 왜 그런가? lol – Wiseguy

답변

1

마술 따옴표가 켜져있을 가능성이 높습니다. 이 문제를 해결하기보다는 오히려 해제해야합니다. 서버에 대한 액세스 권한이없는 경우에도 글로벌 방식으로 처리해야합니다. 예를 들어 :

if ((function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) || ini_get('magic_quotes_sybase')) { 
    foreach ($_POST as $k => $v) { $_POST[$k] = stripslashes($v); } 
    foreach ($_GET as $k => $v) { $_GET[$k] = stripslashes($v); } 
    foreach ($_COOKIE as $k => $v) { $_COOKIE[$k] = stripslashes($v); } 
} 

코드의 시작 부분에 그 퍼팅 당신이 마법 따옴표 처리해야 위치를 추적 할 필요가 없습니다 의미하는 모든 계기로 처리되어 있는지 마법 따옴표를합니다.

여기에 자세한 내용이 나와 있습니다. http://www.php.net/manual/en/function.get-magic-quotes-gpc.php

+0

로컬에서 PHP 정보를 확인했지만 꺼져 있지만 런타임이 켜져 있으므로 문제가 런타임에 무엇입니까 ?? – Vahid

+0

그렇다면 그렇습니다. http://www.php.net/manual/en/function.get-magic-quotes-runtime.php는'set_magic_quotes_runtime' 함수를 사용하여 어떻게 비활성화시킬 수 있는지 보여줍니다. –

+1

사실이라고 생각합니다. 참으로 나는 희망한다 ;-) 많이 고마워. – Vahid

1

는 설정, MySQL의 미스터리보다 더 PHP의 신비를 인용 :) 대신 mysql_real_escape_string()를 사용하는 좀 더 일반적인 기능을 사용할 수 있습니다 : 당신이 있는지 확인이 코드

function escape($s) 
{ 
    if (get_magic_quotes_gpc()) $s=stripslashes($s); 
    return mysql_real_escape_string($s); 
} 

을 옵션이 활성 상태이고 첫 번째 스트리핑을 수행합니다.

+0

@Vahid는이 방법으로 작동하는지 알려주고 분명히 mysql_real ...()을 내 escape() 함수로 대체해야합니다 :) – Cranio

+0

답변을 테스트하고 서버 코드에서이 방법을 사용했지만 내 로컬 서버가 여전히 \ 인쇄를 얻는 중! – Vahid

관련 문제