3 つのクラスがあります:
1. フィルター入力 (軽量)
input_filter クラス
$_GET、$_POST などのパラメーターのフィルター処理を担当します
戻り値の型は配列であり、made_sql クラスのパラメーターとして使用されます
2. SQL文へ
class made_sql
パラメータの型は配列とテーブル名(文字列)、配列のキー名はテーブルの列名、値は挿入値です
戻り値の型は文字列で、次のように使用されますmysql ->query メソッド パラメータ
3. データベース クエリ
class mysql
シングルカラム モードを使用し、静的メソッドを使用してオブジェクトを取得します。詳細については、instanceof 演算子の関数を参照してください
コードをコピー コードは次のとおりです:
class input_filter
{
private $input_all; // フィルタリングされる配列
private $rustle; // フィルタリングされた結果
// コンストラクターのパラメーターは、これらの
public function __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 キーname が文字列ではない場合、エラー メッセージを返します
// キー
if(!is_string($key_input)) // エラー
{
echo 'このキーは文字列ではありません'
return false;
// # は mysql Note です。
$key_one = str_replace('#' ,'',$key_input);
$key = htmlspecialchars($key_one,ENT_QUOTES,'UTF-8'); が見つかりませんでした。 # の HTML エスケープ文字なので、何も置き換えません
$val_one = str_replace(' #','',$val_input); この関数は < > を変換するだけです。すべてのシンボル
$val = htmlspecialchars($val_one,ENT_QUOTES,'UTF-8' );
// マージ
$rustle_one = array($key=>$val);
// 配列をマージ
$this-> Rustle = array_merge($this->rustle,$rustle_one);
}
}
//この関数は少し冗長なので、将来の拡張のために残しておきます
public function get_filter_rustle()
{
$this->filter_arr( );
return $this->rustle ;
}
}
メソッドの呼び出し:
コードをコピーする コードは次のとおりです:
$filter = new filter_input($_GET) // または $_POST
$input_data = $ filter->get_filter();
SQL ステートメントに変換します:
コードをコピーします。 コードは次のとおりです:
class madesql
{
private $Cnow_ary
private $Cname_str; ; //最後の SQL ステートメントの文字列型
public function __construct($Cary,$Cname)
{
// 受け取ったパラメータの型が配列かどうかを確認します
if (! is_array($Cary))
return false; $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 文字のみを置換します (1)
$cols_sql = substr_replace($vals_sql,'',0,1);
$vals_sql = substr_sql,'',0,1); ;insert_sql =
'INSERT INTO '.$this->Cname_str.' ( '
.$cols_sql.' ) VALUES ( '.$vals_sql.' )' // ステートメント整形
}
// 拡張子
public の場合function getSql()
{
$this->setSql();
return $this->insert_sql;
}
3. データベース クエリ クラスは、書籍では単一列モードを参照しています (静的メソッドを使用してオブジェクトを取得し、スクリプト内にデータベース クエリ クラスのインスタンスが 1 つだけ存在するようにします)
このクラスではシングルトン モードが少し使用されていると思います。使用される
コピー コードは次のとおりです:
class mysql
{
private $connect;
static $objectMysql; // オブジェクトを保存します
private function __construct() 7 {
// このコンストラクターはオブジェクトの作成時に呼び出されます。初期化には
$connect = mysql_connect('db address' ,'パスワード','データベース名');$this->db = mysql_select_db('db',$connect);
}
public static function Mysql_object()
{
//instanceof 演算子は、オブジェクトがクラスまたはインターフェイスのインスタンスに属しているかどうかを確認するために使用されます。私が言ったことはあまり標準的ではありません...
//$objectMysql が mysql(self) のインスタンスではない場合は、インスタンスを作成します
if(! self::$objectMysqlinstanceof self)
self::$objectMysql = new mysql () ;
//この時点で $objectMysql はすでにオブジェクトです
return self::$objectMysql;
}
public function query($sql)
{
return mysql_query($sql,$this->db);
}
}
それでは、使い方をまとめます
コードをコピー コードは次のとおりです。
$filter = new filter_input($_GET) // または $_POST
$input_data = $filter->get_filter( );
$ madeSql($input_data,'テーブル名');
$mysql = mysql::Mysql_object() ; ($sql) )
echo 'Ok';
else
echo 'failure';
データベースへの書き込み操作を完了するには、これらの数行のコードのみが必要です
さらに、プライベートとパブリックについて話しましょう。コンストラクターの問題、本の mysql シングルトン モード コンストラクターは private として宣言されており、シングルトン モードのないクラスはコンパイル エラーを生成します。つまり、PHP はオブジェクトを作成できません。
その理由は、オブジェクトの作成がクラスの外で行われることが多く、コンストラクターにアクセスできないという問題が発生するためです。 単一列モードでは、独自のクラスにオブジェクトが作成されるため、プライベート メソッドへのアクセスに制限はありません。
当初、シングルトン モードは同じオブジェクトの作成を防ぐだけだと思っていましたが、シングルトン モードではコンストラクターをカプセル化できるようです。これにより、filter_input クラスの結果をパラメーターとして直接使用できるという前提が得られます。 madesql クラスの内容は次のとおりです:
フォームの名前はデータベースの列名と同じである必要があります。そうしないと、多くのことが無駄になります