L'article précédent a présenté comment PHP utilise DAO (Database Access Object Interface) pour accéder à la base de données. L'utilisation de DAO nécessite que les programmeurs écrivent des instructions SQL complexes, Yii fournit Query Builder pour aider les programmeurs à générer des instructions SQL. fournit une méthode orientée objet pour créer dynamiquement des instructions SQL. Pour faire une comparaison inappropriée, les interfaces DAO de PHP et .Net sont très similaires. Elles ressemblent un peu à LINQ, bien qu'elles aient beaucoup de fonctions plus petites. Pour certaines requêtes SQL simples, il n'est généralement pas nécessaire de recourir au Générateur de requêtes, comme par exemple l'interrogation de la table Employee dans l'article précédent.
Par rapport à l'utilisation directe d'instructions SQL, l'utilisation de Query Builder présente les avantages suivants :
Prend en charge la création dynamique de requêtes SQL plus complexes via des programmes.
Ajoutez automatiquement des guillemets aux noms de tables et aux listes dans les instructions SQL créées pour éviter les conflits avec les identifiants SQL réservés.
Spécifiez d'ajouter des guillemets pour les paramètres et d'utiliser la liaison de paramètres autant que possible pour réduire le risque d'injection SQL.
L'utilisation de Query Builder n'écrit pas directement d'instructions SQL, mais fournit un certain degré d'abstraction de base de données, ce qui facilite le changement de type de base de données.
Cet exemple interroge les deux tables Customer et Employee de Chinook, et interroge les informations de contact de tous les clients gérés par EmployeeId=4.
Si vous utilisez une requête SQL, vous pouvez écrire :
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 Cet exemple utilise Query Builder pour créer une requête SQL et modifier la méthode indexAction de SiteController :
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, )); }
Vous pouvez voir que Query Builder utilise également CDbCommand. CDbCommand fournit les méthodes suivantes pour interroger les données :
select() selectDistinct() from() where() join() leftJoin() rightJoin() crossJoin() naturalJoin() group() having() order() limit() offset() union()
De plus, vous pouvez voir la méthode de définition des données :
createTable() renameTable() dropTable() truncateTable() addColumn() renameColumn() alterColumn() dropColumn()是 createIndex() dropIndex()
Les méthodes prises en charge par CDbCommand correspondent essentiellement aux mots-clés de l'instruction SQL un à un, il s'agit donc de préférences personnelles sans utiliser Query Builder. Vous pouvez utiliser des instructions SQL directement pour du SQL simple. et vous pouvez utiliser Query Builder pour des requêtes plus complexes.
Cet exemple montre les résultats :
Ce qui précède est le contenu du tutoriel du framework de développement PHP Yii Framework (25) exemple de générateur de requêtes de base de données pour. pour plus de contenu connexe, veuillez suivre le site Web PHP chinois (www.php.cn) !