Introduction - autoPrepare et autoExecute

Introduction - autoPrepare et autoExecute – Prépare et exécute automatiquement une requête SQL

Description

Objet

autoPrepare() et autoExecute() facilitent votre travail. Avec ces fonctions, vous n'avez plus à écrire ces requêtes laborieuses (INSERT or UPDATE) qui sont difficiles à maintenir lorsque vous ajoutez un champ par exemple.

Imaginez que vous avez une table 'user' avec trois champs (id, name et country). Vous devez écrire vos requêtes de cette façon :

INSERT INTO table (id, name, country) VALUES (?, ?, ?)
UPDATE table SET id=?, name=?, country=? WHERE ...

Si vous ajoutez un champ ('birthYear' par exemple), vous devez réécrire votre requête, ce qui est fastidieux et peut vous faire faire des erreurs (si vous oubliez de changer une requête par exemple).

autoPrepare

Avec autoPrepare(), vous n'avez plus à écrire vos requêtes insert ou update. Par exemple :

<?php
// On suppose que vous avez un objet $db valide...
$table_name   'user';
$table_fields = array('id''name''country');

$sth $db->autoPrepare($table_name$table_fields,
                        
DB_AUTOQUERY_INSERT);

if (
PEAR::isError($sth)) {
    die(
$sth->getMessage());
}
?>

Dans cet exemple, autoPrepare() va construire la requête suivante :

INSERT INTO user (id, name, country) VALUES (?, ?, ?)

Puis, la fonction prepare() sera appelée.

Pour ajouter de nouveaux enregistrements, vous devez utiliser execute() ou executeMultiple() comme cela :

<?php
// ... en continuité avec l'exemple précédent ...
$table_values = array(1'Fabien''France');

$result =& $db->execute($sth$table_values);

if (
PEAR::isError($result)) {
    die(
$result->getMessage());
}
?>

Donc, vous n'avez plus à écrire aucune requête INSERT ! Et cela fonctionne avec les requêtes UPDATE aussi. Pour des raisons de flexibilité, il vous reste seulement à écrire la clause WHERE. Par exemple :

<?php
// On suppose que vous avez un objet $db valide...
$table_name   'user';
$table_fields = array('name''country');
$table_values = array('Bob''USA');

$sth $db->autoPrepare($table_name$table_fields,
                        
DB_AUTOQUERY_UPDATE'id = 1');

if (
PEAR::isError($sth)) {
    die(
$sth->getMessage());
}

$result =& $db->execute($sth$table_values);

if (
PEAR::isError($result)) {
    die(
$result->getMessage());
}
?>

autoPrepare() construira la requête suivante :

UPDATE user SET name=?, country=? WHERE id=1

Puis, appelera prepare() avec cette requête.

Faites attention : si vous ne spécifiez aucune clause WHERE, tous les enregistrements de la table seront mis à jour.

autoExecute

Utiliser autoExecute() est la façon la plus facile de faire des requêtes d'insertion ou de mise à jour. C'est un mélange de autoPrepare() et de execute().

Vous n'avez besoin que d'un tableau associatif (clef => valeur) où les clefs sont les noms des champs et les valeurs sont les valeurs de ces champs. Par exemple:

<?php
// On suppose que vous avez un objet $db valide...
$table_name    'user';
$fields_values = array(
    
'id'      => 1,
    
'name'    => 'Fabien',
    
'country' => 'France'
);

$result $db->autoExecute($table_name$fields_values,
                           
DB_AUTOQUERY_INSERT);

if (
PEAR::isError($result)) {
    die(
$result->getMessage());
}
?>

Et c'est tout ! La requête suivante est construite puis exécutée :

INSERT INTO user (id, name, country)
  VALUES (1, 'Fabien', 'France')

Et c'est la même chose pour les requêtes UPDATE :

<?php
// On suppose que vous avez un objet $db valide...
$table_name    'user';
$fields_values = array(
    
'name'    => 'Fabien',
    
'country' => 'France'
);

$result $db->autoExecute($table_name$fields_values,
                           
DB_AUTOQUERY_UPDATE'id = 1');

if (
PEAR::isError($result)) {
    die(
$result->getMessage());
}
?>

La requête suivante est construite puis exécutée :

UPDATE user SET name='Fabien', country='France'
  WHERE id = 1

Faites attention : si vous ne spécifiez aucune clause WHERE, tous les enregistrements de la table seront mis à jour.

La valeur passée au paramètre $data doit être litéral. Ne soumettez pas des fonctions SQL (par exemple, CURDATE()). Les fonctions SQL qui doivent être exécutées au moment de l'exécution doivent être mises dans une requête préparée.

Prépare et exécute des traitements SQL (Previous) Portabilité de base de données (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.