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.
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.
|