이 기사의 예에서는 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 프레임워크 프로그래밍에 도움이 되기를 바랍니다.