->update() -- Met à jour les variables des objets dans une base de données
Description
Met à jour les variables des objets courants dans la base de données. Si vous fournissez un
objet de données, en tant qu'argument, la méthode mettra à jour uniquement
les différences entre le nouveau et l'ancien.
Si la méthode est appelée avec DB_DATAOBJECT_WHEREADD_ONLY comme argument,
la requête de mise à jour est construite, basée sur les valeurs whereAdd, plutôt que
sur la clé primaire. Ceci permet de meilleures performances pour les mises à jour globales,
plutôt que de mettre à jour ligne par ligne.
Valeur retournée
int : nombre de lignes affectées ou FALSE si une erreur survient
Valeurs renvoyées
Tableau 39-1. Valeurs PEAR_Error possibles
| Code erreur | Message d'erreur | Signification | Solution |
|---|
| DB_DATAOBJECT_ERROR_INVALIDCONFIG | << update:No table definition for $table >> | Aucune définition de table pour $table | |
| DB_DATAOBJECT_ERROR_NODATA | << update: No Data specifed for query $settings >> | Aucune donnée fournie pour la requête $settings | |
Note
Cette fonction ne peut pas être appelée de façon statique.
Exemple
Exemple 39-1. Récupération et mise à jour simple
<?php
$person = new DataObjects_Person;
$person->get(12);
$person->name='fred';
$person->update();
$person = new DataObjects_Person;
$person->get(12);
$original = clone($person); // le clônage est émulé en PHP 4 pour des raisons de compatibilité.
$person->name='fred';
$person->update($original);
?>
|
|
Exemple 39-2. SQL résultant SELECT * FROM person WHERE id = 12
UPDATE person SET name='fred', age='21', eyes='blue' WHERE id = 12
SELECT * FROM person WHERE id = 12
UPDATE person SET name='fred' WHERE id = 12 |
|
|
->insert() (Previous)
|
(Next) ->delete()
|
|
|
Download Documentation
|
Last updated: Sun, 28 Sep 2008 |
|
Do you think that something on this page is wrong? Please file a bug report or add a note.
|
| User Notes: |
Note by: evan@prodromou.name
update() will silently skip any columns that are keys -- even if they're just unique keys, not primary keys.
Say you have a table like this:
CREATE TABLE person (id integer primary key, name varchar(255), email varchar(255) unique key)
This is a pretty common pattern.
The following code will do nothing:
$p = Person::staticGet(1);
$orig = clone($p);
$p->email = 'newemail@example.com';
$result = $p->update($orig);
There doesn't seem to be a workaround for it -- I've resorted to updating unique key columns by hand.
It would be nice if the code for skipping key columns differentiated between primary keys and unique keys and let you update the latter.
Note by: pierre2543@hotmail.com
If you want to update a field to null in the database set the field in your DO to the string 'null'.
For string fields, setting it to '' or 'null' issues null in the update statement.
Example:
Set the contractNumber to null.
//INCORRECT
$contract->get(123);
$contract->contractNumber = null;
$contract->update();
//CORRECT
$contract->get(123);
$contract->contractNumber = 'null';
$contract->update();
Note by: user@example.com
When called with
$object->update($original);
this function appears to return true rather than 0 if no rows are affected.
|
|