>백엔드 개발 >PHP 튜토리얼 >ThinkPHP를 Database_php 예제로 가져올 때 두 개의 백슬래시 이스케이프 및 데이터베이스 클래스 이스케이프 문제에 대한 솔루션

ThinkPHP를 Database_php 예제로 가져올 때 두 개의 백슬래시 이스케이프 및 데이터베이스 클래스 이스케이프 문제에 대한 솔루션

WBOY
WBOY원래의
2016-05-16 20:32:58981검색

이 기사의 예에서는 ThinkPHP를 데이터베이스로 가져올 때 두 개의 백슬래시 이스케이프와 데이터베이스 클래스 이스케이프에 대한 솔루션을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 방법은 다음과 같습니다.

이것은 Magic_quotes_gpc가 켜져 있을 때 발생합니다. 그 이유는 thinkphp가 데이터베이스로 가져올 때 Magic_quotes_gpc가 켜져 있는지 여부를 확인하지 않았고 관계없이 이스케이프했기 때문입니다.
해결 방법은 항목 파일에 다음 코드를 추가하는 것입니다.

코드 복사 코드는 다음과 같습니다.
if (!get_magic_quotes_gpc()) {
함수 addlashes_deep($value) {
         $value = is_array($value)
              array_map('addslashes_deep', $value):
addlashes($value)
          $value 반환;                                }  
$_POST = array_map('addslashes_deep', $_POST)
$_GET = array_map('addslashes_deep', $_GET)
$_COOKIE = array_map('addslashes_deep', $_COOKIE)
$_REQUEST = array_map('addslashes_deep', $_REQUEST)
}
누군가 DbMysql.class.php의 이스케이프 기능을 다음과 같이 수정했습니다.

코드 복사 코드는 다음과 같습니다.
public function escape_string($str) {
if (get_magic_quotes_gpc()) {
$str 반환
}
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID);
}그밖에{
return mysql_escape_string($str)
}
}
사실 이 방법은 바람직하지 않습니다! 매직 기능이 켜져 있고 $str이 post 또는 get(예: 텍스트 또는 데이터베이스 읽기)으로 획득되지 않은 경우에도 여전히 백슬래시를 추가하지 않기 때문입니다.

따라서 $str이 이스케이프되었는지 여부에 관계없이 항상 이스케이프를 먼저 제거한 다음 이스케이프를 추가합니다. 이렇게 하면 이중 이스케이프 및 누락된 이스케이프가 방지됩니다.
수정한 방법은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
public function escape_string($str) {
$str = 스트립슬래시($str)
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID)
}그밖에{
return mysql_escape_string($str)
}
}
이 글이 모든 분들의 ThinkPHP 프레임워크 프로그래밍에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.