세 가지 클래스가 있습니다.
1. 필터 입력(경량)
class input_filter
는 $_GET, $_POST와 같은 매개변수 필터링을 담당합니다.
반환 값 유형은 배열입니다. made_sql 클래스
의 Parameter 사용 2. SQL문으로 변환
class made_sql
파라미터의 종류는 배열, 테이블명(string), 배열의 키는 테이블의 컬럼명, value는 삽입된 값입니다.
반환 값 유형은 mysql ->query 메서드
의 매개 변수로 사용되는 문자열입니다. 3. 데이터베이스 쿼리
class mysql
은 단일 열 모드를 사용하고 자세한 내용은 인스턴스 오브 연산을 참조하세요. 기호의 기능
코드 복사 코드는 다음과 같습니다.
class input_filter
{
private $input_all; filtered
private $rustle; // 필터링된 결과
/ /생성자 매개변수는 $_GET 또는 $_POST일 수 있습니다.
공용 함수 __construct($input_C)
{
if(is_array($input_C) ))
$this->input_all = $input_C;
else
echo '매개변수가 유효하지 않습니다.'
//초기화, 그렇지 않으면 PHP는 배열을 병합할 때 어떤 유형인지 알 수 없습니다. 처음
$this->rustle = array();
}
private function filter_arr() // 메인 함수
{
foreach ($this->input_all as $ key_input => $val_input)
{
//if 키 이름이 문자열이 아닌 경우 오류 메시지가 반환됩니다.
// 키
if(!is_string($key_input)) // error
{
echo '이 키는 문자열이 아닙니다';
return false
}
// #은 mysql입니다.
$key_one = str_replace('# ','',$key_input);
$key = htmlspecialchars($key_one,ENT_QUOTES ,'UTF-8');
// #에 대한 HTML 이스케이프 문자를 찾지 못해 바꿨습니다. with Nothing
$val_one = str_replace('#','',$val_input)
/ / 이 함수는 < ' "만 변환합니다. 모든 기호를 이스케이프하는 유사한 함수가 있습니다.
$ val = htmlspecialchars($val_one,ENT_QUOTES,'UTF-8');
// merge
$rustle_one = array($key=>$val)
//배열 병합
$ this->rustle = array_merge($this->rustle,$rustle_one);
}
}
//이 함수는 약간 중복되므로 향후 확장을 위해 남겨두세요
public function get_filter_rustle ()
{
$this->filter_arr();
return $this-> ;rustle ;
}
}
호출 방법:
복사 code 코드는 다음과 같습니다.
$filter = new filter_input($_GET) ; // 또는 $_POST
$ input_data = $filter->get_filter()
SQL 문으로 변환 :
코드 복사
class madesql
{
private $Cnow_ary; // 유형 배열 수신 매개변수
private $Cname_str
private $insert_sql; 최종 SQL 문 문자열 유형
공용 함수 __construct($Cary,$Cname)
{
//전달된 입력 매개변수 유형이 배열인지 확인
if (! is_array($Cary) )
return false;
else
$this->Cnow_ary = $Cary; // 작성된 값
$this->Cname_str = $Cname; 25 }
private function setSql() // 주 함수, SQL 문 생성
{
foreach ( $this-> Cnow_ary as $key_ary => $val_ary )
{
$ cols_sql = $cols_sql.','.$key_ary; //컬럼 이름 조합
$vals_sql = $vals_sql.', ''.$ val_ary.'' //값 조합
}
// 이전 foreach 알고리즘에 문제가 있어서 첫 번째 문자가 쉼표입니다
// 따라서 sunstr_replace()를 사용하여 삭제하고 첫 번째 문자(0)부터 시작하여 한 문자(1)만 바꾸세요
$ cols_sql = substr_replace($vals_sql,'',0,1)
$vals_sql = substr_replace($vals_sql,'',0,1);$this->insert_sql =
'INSERT INTO '.$this->Cname_str.' ( '
.$cols_sql.' ) VALUES ( '.$vals_sql.' )' // 구문
}
//확장자용
public function getSql()
{
$this->setSql();
return $this->insert_sql
}
3.
책에서 데이터베이스 쿼리 클래스는 단일 열 모드를 참조합니다(정적 메서드를 사용하여 개체를 가져오므로 스크립트에 데이터베이스 쿼리 클래스의 인스턴스가 하나만 존재합니다)
싱글턴 패턴이 유용하다고 생각합니다 이 클래스의
코드를 복사하세요. 코드는 다음과 같습니다:
class mysql
{
private $connect;
static $objectMysql; // 객체 저장
private function __construct() 7 {
// 이 생성자는 초기화할 객체를 생성할 때 호출됩니다.
$connect = mysql_connect('db address','password','dbname');$this->db = mysql_select_db('db',$connect);
}
public static function Mysql_object()
{
//instanceof 연산자는 객체가 속한 객체인지 확인하는 데 사용됩니다. a 특정 클래스 또는 인터페이스의 인스턴스입니다. 제가 말한 내용은 별로 표준적이지 않습니다...
//$objectMysql이 mysql(self)의 인스턴스가 아닌 경우
if(!self::$objectMysql instanceof self)
self를 생성하세요. :$ objectMysql = new mysql()
//현재 $objectMysql은 이미 객체입니다
return self::$objectMysql
}
공용 함수 쿼리($sql)
{
return mysql_query($sql,$this->db);
}
}
자, 사용법을 요약하자면
코드 복사
$filter = new filter_input($_GET) ; // 또는 $_POST
$input_data = $filter->get_filter()
$madeSql = new madesql($input_data,' tableName'); $sql = $madeSql->getSql();
$mysql = mysql::Mysql_object()
if( $mysql->query($sql) )
echo 'Ok' ;
else
echo 'failure';
데이터베이스에 쓰기 작업을 완료하려면 다음 호출 코드 줄만 필요합니다. 책에 나오는 생성자의 프라이빗 및 퍼블릭 문제 mysql 싱글톤 모드의 생성자는 프라이빗으로 선언되어 있지만 싱글톤 모드가 없으면 컴파일 오류가 발생합니다. 즉, PHP가 객체를 생성할 수 없습니다. 확인했습니다.
이유는 객체 생성이 클래스 외부에서 이루어지는 경우가 많아 생성자에 접근할 수 없는 문제가 발생하기 때문입니다. 단일 열 모드는 자체 클래스에 객체를 생성하므로 전용 메서드에 액세스하는 데 제한이 없습니다. 폼 이름은 데이터베이스의 열 이름과 동일해야 합니다. 그렇지 않으면 너무 많은 것을 볼 수 있습니다