PHPコードを見てください。
$user->v_useragent = 'coresky.agent';
このようなコードは、UPDATEまたはINSERT SQLクエリを引き起こす可能性があります。または、同じデータが既にデータベースにインストールされている場合、この機能はPhantom SQLクエリと呼ばれます。 通常、ほとんどのCRMに同様の機能がありますが、CRMなしでどのように実装できるかを見てみましょう。 Phantomリクエストは、特に設定に関して、Webアプリケーションで非常に広く使用される可能性があります。 典型的な(ただし必須ではない)アルゴリズムは、データベースからのデータの読み取り、データの変更(場合によっては複数回)、およびデータベース内のデータを更新するための実際のSQLクエリの生成の3段階で進みます。 詳細を見てみましょう...
合計で、各ステージに1つずつ、合計3つのメソッドが必要です。 データベースから読み取ったデータを完全にアンパックする最初のメソッドのコードを示します。これは非常に単純なためです。
class SKY // coresky { ... static function &ghost($char, $original, $sql = '', $flag = 0) { SKY::$mem[$char] = [$flag, $flag & 4 ? null : $original, $sql, []]; if ($sql) trace('GHOST SQL: ' . (is_array($sql) ? end($sql) : $sql), false, 1); if ($original) foreach (explode("\n", unl($original)) as $v) { list($k, $v) = explode(' ', $v, 2); SKY::$mem[$char][3][$k] = unescape($v, true); } return SKY::$mem[$char][3]; }
メソッド入力パラメーター:
- $ char-英語のアルファベットの1文字の小さい文字。ゴーストクエリの機能のタイプを示し、上記の例のように変数プレフィックスで使用できます。
- $ originalはデータベースセルのテキストコンテンツ(MySQLでは `mediumtext`)であり、ファントムクエリのすべての変数は$ charで一括保存されます。 空の文字列も入力できます。
- $ sql-register_shutdown_function()のコールバック関数などで実際のSQLクエリを生成するために使用されるクエリテンプレート。
- $ flag-フラグ。 多くの場合、定義済みの値0が使用されます。
クエリテンプレートには、関数sql(..)またはsqlf(..)に基づいた2つのタイプがあります。 2番目のコードを完全に提供します。正しく使用すると、SQLインジェクションの不可能性が保証され、高速で非常に簡単になります。
function sqlf() {
残念ながら、sqlf()関数は、インジェクションに対する保護の観点から
任意のSQLクエリをコンパイルするという点では普遍的ではありません。 ただし、操作が比較的高速であるため、ユニバーサルsql()関数と並行して存在します。 sqlf()のテンプレートは、1つのmediumtextセルのみで作業する場合に使用されます。 2番目のテンプレートは、テーブルの多くの列に対してこのような保留中のクエリを整理する必要がある場合に使用されます。
記事の冒頭で、指定されたPHPコードの処理はどうですか
$ユーザー変数には、USERオブジェクトへのポインターが含まれています。USERオブジェクトには、__ get()および__set()というマジックメソッドがあります。 プレフィックスv_により、クラスは、 `visitors`セッションテーブルに書き込みを行っていることを理解し、SKY :: save(..)メソッドを呼び出します。このメソッドは、コードをSKY :: $ mem配列に保存します。 スクリプトの最後に、register_shutdown_function()のコールバック関数が呼び出され、データベース内の実際のSQLクエリが実際に実行されます(または実行されません)。
したがって、機能の編成に必要な他の2つの方法は、SKY :: save(..)およびSKY :: here(..)です。 1つ目はデータを配列に格納し、2つ目はデータベースで実際のクエリを生成して実行します。
coreskyコード(再利用可能なコードフレームワークまたはCMF)は、8種類のファントムSQLを使用します。
- データベースに保存されているシステム構成。
- 訪問者の構成
- 許可ユーザーの構成。
- 管理パネルのシステム構成。
- コンソール起動のシステム構成。
- i18nユーティリティの編成には、3種類のファントムSQLが使用されます。
ご覧のとおり、「ファントムSQL」はほとんどすべてのWebアプリケーションに関連しています。
説明されている機能の利点
- アプリケーションの開発時に新しい構成変数を追加するためにALTER TABLE ...(または新しい行を挿入)を行う必要はありません。 データベース構造を変更せずに、PHPコードで新しい変数を簡単に追加できます。
- 同じテーブルの同じ行にレコードがある場合、機能によりデータベースクエリの数を1つに減らすことができます。
欠点
ゴーストSQL変数の場合、インデックスを「ねじ込む」ことはできません;ほとんどの場合、LOCK TABLEを作成したり、他の高度なMySQL機能を使用したりすることはできません。
詳細については
、SKYプロジェクトのWebサイトをご覧ください。