Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & PostgreSQL
PHP & PostgreSQL Forum d'entraide sur PostgreSQL avec PHP. Avant de poster -> FAQ PostgreSQL, Cours PostgreSQL. Pour les questions concernant le moteur PostgreSQL plutôt que les fonctions PHP, merci d'utiliser le forum PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/06/2012, 17h51   #1
cyscek
Invité régulier
 
Inscription : janvier 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 78
Points : 8
Points : 8
Par défaut Select et Update d'array

Bonjour à tous,

Je travaille sur un petit site en php, avec une base de données postgresql. Je me débrouille assez en SQL de manière générale, mais j'ai un peu de mal avec les arrays dans Postgresql.

Voilà mon problème, je récupère d'abord un array dans ma base :

Code :
1
2
3
4
5
6
7
8
$query = 'SELECT list FROM users WHERE city=\''.$city.'\'';
$result = pg_query($query) or die('Échec de la requête : ' . pg_last_error());
$listusers = array();
 
		while ($row = pg_fetch_array($result)) {
			$listusers [] = $row[3];	
		}
$listusers = pg_array_parse($listusers [0], $asText = true);
Jusque là tout va bien, ma fonction pg_array_parse me récupère mes valeurs, pour les mettre sous forme d'array lisible par php. C'est là que ça se gâte.

Je rajoute une valeur dans mon tableau, puis j'essaie de mettre à jour ma base :

Code :
1
2
3
$listusers[] = $user;
		$query = 'UPDATE users SET list= ARRAY[\''.$listusers.'\'] WHERE city=\''.$city.'\'';
		$result = pg_query($query) or die('Échec de la requête : ' . pg_last_error());
Sauf que là, quand j'interroge ma base, j'ai un "{Array}" dans ma list. J'ai farfouillé un peu, sans trouver ce qui ne va pas. Est-ce que je dois reformuler mon array en une chaine de caractère, pour l'updater dans ma base ? Ou il y a une solution plus simple ?
cyscek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2012, 19h35   #2
MaitrePylos
Responsable Livres

 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 588
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 40
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 588
Points : 8 834
Points : 8 834
Ne serait-ce pas plutôt comme ceci :

Code :
1
2
3
4
5
 
$listusers[] = $user;
$tab = implode(',',$listeusers);
		$query = 'UPDATE users SET list = {'.$tab.'}  WHERE city=\''.$city.'\'';
		$result = pg_query($query) or die('Échec de la requête : ' . pg_last_error());
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2012, 09h09   #3
cyscek
Invité régulier
 
Inscription : janvier 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 78
Points : 8
Points : 8
L'utilisation des accolades dans la requête me retourne une erreur :

Citation:
Warning: pg_query() [function.pg-query]: Query failed: ERREUR: erreur de syntaxe sur ou près de « { » LINE 1: UPDATE ...
C'est ce que j'avais fait au départ, mais ça me mettait cette erreur, et je n'arrive pas à trouver comment passer outre ça.
cyscek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2012, 11h23   #4
cyscek
Invité régulier
 
Inscription : janvier 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 78
Points : 8
Points : 8
Je me répond à moi même après plein de tests

Il suffisait de faire :

Code :
$query = 'UPDATE users SET list = \'{'.$tab.'}\'  WHERE city=\''.$city.'\'';
les "\'" permettent de régler le problème, et le implode fait exactement ce que je cherchais au départ, merci !
cyscek est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h43.


 
 
 
 
Partenaires

Hébergement Web