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 (?, ?, ?)
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());
}
?>
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.
Avertissement
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.