pg_update

(PHP 4 >= 4.3.0, PHP 5)

pg_update Modifie les lignes d'une table

Description

mixed pg_update ( resource $connection , string $table_name , array $data , array $condition [, int $options = PGSQL_DML_EXEC ] )

pg_update() modifie les lignes de la table table_name, qui vérifient la condition condition, et leur donne la valeur de data. Si options est spécifié, pg_convert() est appliqué à data avec les options spécifiées.

Liste de paramètres

connection

Une ressource de connexion PostgreSQL.

table_name

Le nom de la table dans laquelle les lignes seront mises à jour.

data

Un tableau dont les clés sont les noms des champs dans la table table_name, et où les valeurs sont les lignes correspondantes qui seront mises à jour.

condition

Un tableau dont les clés sont les noms des champs dans la table table_name, et où les valeurs sont les conditions à remplir par les lignes pour être mises à jour.

options

Toutes combinaisons de constantes parmi PGSQL_CONV_FORCE_NULL, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC ou PGSQL_DML_STRING. Si PGSQL_DML_STRING fait partie du paramètre options, alors la requête sera retournée. Lorsque la constante PGSQL_DML_NO_CONV ou la constante PGSQL_DML_ESCAPE est définie, aucun appel à la fonction pg_convert() ne sera réalisé en interne.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient. Retourne une chaîne de caractères si PGSQL_DML_STRING est passé via le paramètre options.

Exemples

Exemple #1 Exemple avec pg_update()

<?php 
  $db 
pg_connect ('dbname=foo');
  
$data = array('field1'=>'AA''field2'=>'BB');

  
// C'est sécuritaire, car $_POST est converti automatiquement
  
$res pg_update($db'post_log'$_POST$data);
  if (
$res) {
      echo 
"Les données ont été modifiées : $res\n";
  } else {
      echo 
"Problème dans les données utilisateur\n";
  }
?>

Historique

Version Description
5.6.0 La fonction n'est plus expérimentale. Ajout de la constante PGSQL_DML_ESCAPE ainsi que du support des données de type TRUE/FALSE et NULL.
5.5.3/5.4.19 Les injections SQL directes dans table_name et les injections SQL indirectes via les identifiants ont été résolues.

Voir aussi

  • pg_convert() - Convertit des tableaux associatifs en une commande PostgreSQL

add a note add a note

User Contributed Notes 3 notes

up
1
sdibb at myway dot com
9 years ago
This function is similar to PEAR::DB's autoExecute() function, with the only difference being that the where clause is an array instead of a string.

Also, if you want to use your instance of the DB class with this function, you can reference the existing resource connection with $db->connection.

An example would be:
<?
     pg_update($db->connection, $arr_update, $arr_where);
?>
up
0
dominik dot bonsch at homesono dot de
6 years ago
Using pg_update() and pg_insert() without key validation is not secure!

You need to check which data pairs you get, and if you want to allow to updated this column.

Example:

You have a table with tree colums: username, password, userlevel.

Your users may change only their username, and their password but not their userlevel.

If you don't filter the keys in the request array, every user can now change his userlevel just by sending a POST Request with "userlevel=>100".

So if you don't check if the key are allowed in your request array you'll get serious sql injection vulnarabilities in your code.
up
0
jhooks
8 years ago
> Return Values
>
> Returns TRUE on success or FALSE on failure. Returns string if
> PGSQL_DML_STRING is passed via options.

I have found in my copy of PHP (version 4.4.0) that if you use the 'PGSQL_DML_STRING' option, the function does not execute any query.  It merely returns the query which would have been executed. 

Another thing I noticed, pg_update does not seem to make use of pg_trace (atleast in 4.4.0).

PS this isn't a bug report, just an explanation of some undocumented features I noticed.  As the manual says, the function is still in development so this behaviour may differ from version to version.
To Top