前の記事では、PHP が DAO (Database Access Object Interface) を使用してデータベースにアクセスする方法を紹介しましたが、DAO を使用するには、プログラマが SQL ステートメントを作成するのに役立つクエリ ビルダーが用意されています。 SQL ステートメントを動的に作成するためのオブジェクト指向のメソッド。不適切な比較をする場合、PHP の DAO と .Net の DAO インターフェイスは LINQ によく似ていますが、その機能は LINQ よりもはるかに小さいです。一部の単純な SQL クエリの場合は、通常、前の記事の Employee テーブルのクエリなど、クエリ ビルダーに頼る必要はありません。
SQL ステートメントを直接使用する場合と比較して、クエリ ビルダーの使用には次の利点があります:
プログラムを介したより複雑な SQL クエリの動的作成をサポートします。
SQL 予約識別子との競合を避けるために、作成された SQL ステートメント内のテーブル名とリストに引用符を自動的に追加します。
SQL インジェクションのリスクを軽減するために、パラメータに引用符の追加を指定し、パラメータ バインディングを可能な限り使用します。
クエリ ビルダーを使用すると、SQL ステートメントを直接作成しませんが、ある程度のデータベース抽象化が提供され、データベース タイプの切り替えが容易になります。
この例では、Chinook の 2 つのテーブル Customer と Employee をクエリし、EmployeeId=4 で管理されるすべての顧客の連絡先情報をクエリします。
SQL クエリを使用する場合は、次のように記述できます:
SELECT c.FirstName, c.LastName , c.Address,c.Email。 FROM customer c INNER JOIN employee e ON c.SupportRepId=e.EmployeeId
WHERE e.EmployeeId=4 この例では、クエリ ビルダーを使用して SQL クエリを作成し、SiteController の IndexAction メソッドを変更します:
public function actionIndex() { $model = array(); $connection=Yii::app()->db; $command=$connection->createCommand() ->select('c.FirstName, c.LastName, c.Address,c.Email') ->from('customer c') ->join('employee e','c.SupportRepId=e.EmployeeId') ->where('e.EmployeeId=4'); $dataReader=$command->query(); // each $row is an array representing a row of data foreach($dataReader as $row) { $customer= new DataModel(); $customer->firstName=$row['FirstName']; $customer->lastName=$row['LastName']; $customer->address=$row['Address']; $customer->email=$row['Email']; $model[]=$customer; } $this->render('index', array( 'model' => $model, )); }
クエリ ビルダーも同様であることがわかります。 CDbCommand が提供する CDbCommand を使用します データのクエリ方法は次のとおりです:
select() selectDistinct() from() where() join() leftJoin() rightJoin() crossJoin() naturalJoin() group() having() order() limit() offset() union()
さらに、データ定義方法:
createTable() renameTable() dropTable() truncateTable() addColumn() renameColumn() alterColumn() dropColumn()是 createIndex() dropIndex()
CDbCommand でサポートされているメソッドは、基本的に SQL ステートメントのキーワードに対応していることがわかります。単純な SQL ステートメントに対応するクエリ ビルダーは SQL ステートメントを直接使用でき、より複雑なクエリの場合はクエリ ビルダーを使用できます。
この例は結果を表示します:
上記は、PHP 開発フレームワーク Yii Framework チュートリアル (25) データベース - クエリ ビルダーの例の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www) に注意してください。 .php.cn)!