Introduction - Exécution

Introduction - Exécution – Préparation & Exécution/Exécutions multiples

Description

Objectif

prepareQuery() et executeQuery*() vous fournissent plus de puissance et de flexibilité pour l'exécution de vos requête. Vous pouvez les utiliser, si vous devez exécuter plus d'une fois la même requête (i.e. ajout d'adresses dans une base de données) ou si vous voulez supporter différentes bases de données, qui ont une implémentation différente du standard SQL.

Imaginons que vous voulez support deux bases de données possédant une synthaxe différente pour l'INSERT :


db1 : INSERT INTO tbl_name ( col1, col2 ... ) VALUES ( expr1, expr2 ... )
db2 : INSERT INTO tbl_name SET col1=expr1, col2=expr2 ...

Vous pouvez par exemple créer un tableau contenant les requêtes comme ceci :

<?php
$statement
['db1']['INSERT_PERSON'] = "INSERT INTO person ( surname, name, age ) VALUES ( ?, ?, ? )" ;
$statement['db2']['INSERT_PERSON'] = "INSERT INTO person SET surname=?, name=?, age=?" ;
?>

Préparation

Pour utiliser les fonctionnalités ci-dessus, vous devez effectuer deux étapes. La première est l'utilisation de la méthode prepareQuery, la seconde est l'utilisation de la méthode executeQuery.

Prepare() doit être appelé avec la requête générique au moins une fois. Il retourne un gestionnaire pour cette requête.

La création d'une requête générique est simple. Écrivez la requête SQL, comme d'habitude, i.e.


SELECT surname, name, age FROM person
WHERE name = 'name_to_find' AND age < 'age_limit'

Maintenant, vérifiez quels paramètres doivent être remplacés lors de l'exécution du script. Substituez ces paramètres avec les marqueurs.


SELECT surname, name, age FROM person WHERE name = ? AND age < ?

Et... c'est tout ! Maintenant, vous avez une requête générique, nécessaire pour la méthode prepareQuery() .

prepareQuery() peut gérer des types différents de marqueurs ou de jokers.

  • ? - (recommandé) place d'une valeur scalaire comme une chaîne de caractères ou des nombres, la valeur sera échappée, en fonction de la base de données utilisée.
  • ! - place pour une valeur scalaire et sera insérée dans la requête "tel que".
  • & - nécessite un nom de fichier existant, le contenu de ce fichier sera inclu dans la requête (i.e. pour la sauvegarde des données binaires d'un fichier graphique dans une base de données)

Exécution / Exécution multiple

Après la préparation de la requête, vous pouvez exécuter la requête. Cedci signifie que vous devez assigner les variables à la requête préparée. Pour ce faire, executeQuery() nécessite deux arguments, le gestionnaire de requête de prepareQuery() et un tableau avec les valeurs à assigner. Le tableau doit être numériquement ordonné. La première entrée du tableau représente le premier joker, la seconde, le second joker, etc.

Insertion de données dans une base de données

<?php
$alldata 
= array(  array(1'one''en'),
array(
2'two''to'),
array(
3'three''tre'),
array(
4'four''fire'));
$sth $dbh->prepareQuery("INSERT INTO numbers VALUES(?,?,?)");
foreach (
$alldata as $row) {
   
$dbh->executeQuery($sth$row);
}
?>

Dans cet exemple, la requête est exécutée quatre fois :


INSERT INTO numbers VALUES( '1', 'one', 'en')
INSERT INTO numbers VALUES( '2', 'two', 'to')
INSERT INTO numbers VALUES( '3', 'three', 'tre')
INSERT INTO numbers VALUES( '4', 'four', 'fire')

executeMultiple() fonctionne de la même façon mais nécessite un tableau à deux dimensions.

Utilisation de executeMultiple() au lieu de executeQuery()

<?php
...
$alldata = array(  array(1'one''en'),
array(
2'two''to'),
array(
3'three''tre'),
array(
4'four''fire'));
$sth $dbh->prepareQuery("INSERT INTO numbers VALUES(?,?,?)");
$dbh->executeMultiple($sth$alldata);
}
?>

Le résultat est le même. Si un des enregistrements échoue, les enregistrements non-terminés ne seront pas exécutés.

Si executeQuery*() échoue, une MDB_Error sera émise, sinon MDB_OK sera retourné.

Séquences de base de données (Previous) Classe principale (Next)
Last updated: Sun, 29 Aug 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.