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 27/06/2012, 13h26   #21
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Citation:
Envoyé par rawsrc Voir le message
Bonjour,

@stealth
Utiliser un champ Postgres ARRAY, voire un HSTORE n'est pas de la bidouille. Ce type de champ ont leur utilité crois-moi.
Ça à son intérêt pour un champs libre ou autre, mais la c'est clairement une table lié
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2012, 13h32   #22
Fench
Expert Confirmé
 
Avatar de Fench
 
Homme
Chercheur en informatique
Inscription : mai 2002
Messages : 2 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Groenland

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2002
Messages : 2 346
Points : 3 231
Points : 3 231
Juste une petite remarque (puisque vous avez pas voulu prendre ma solution , ... c'est pas grave), tous les moteurs de base de données ont leur propre fonction d'echappement:
mysql_real_escape_string pour mysql
pg_escape_string pour postGres

Et encore je suis pas sûr qu'elles protégent des ','
__________________
Meuuh en AI à l'INRA
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2012, 14h09   #23
cyscek
Invité régulier
 
Inscription : janvier 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 78
Points : 8
Points : 8
En fait, cela correspond à ce que je voulais faire et ce que m'a conseillé fench avec le caractère de remplacement non ? Parce que tout à l'heure j'ai testé en remplaçant mes virgules par des /;/ , ça marchait très bien. Mais je me disais qu'il y avait surement plus élégant que ça.

Là je viens d'essayer ton code rawsrc. Ca "marche" en partie. Je m'explique :

je rentre test dans la base, j'ai {test}

Puis test1, test2 j'ai {test, "test1, test2"}

mais là, si je rentre test3 j'ai {test, "\"test1, test2\"",test3}

Est-ce normal que les " soit doublé ? Comment puis-je éviter ça ?

J'ai juste fait ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
while ($row = pg_fetch_array($result)) {
			$listeusers[] = $row[3];	
		}
		$listeusers= pg_array_parse($listeusers[0], $asText = true);
		$listeusers[] = $listeuserstemp;
 
		$delim = '$$';
		$escaped = array();
		foreach($listeusers as $value) {
			$escaped[] = $delim.$value.$delim;
		}
		$sql = 'ARRAY['.implode(', ', $escaped).']';
 
		$query = 'UPDATE users SET list = '.$sql.' WHERE city=\''.$city.'\'';
EDIT : de plus, j'ai beau relire le code, je ne comprend pas comment cela pourrait marcher. Je ne retrouve jamais le $delim dans mes chaînes (aucun $$). J'ai tenté d'enlever les " à chaque tour de boucle dans le foreach, mais du coup ça enlève ceux censés entouré totalement la valeur. Peut-être devrais-je tenter d'enlever simplement les \".
cyscek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2012, 15h54   #24
cyscek
Invité régulier
 
Inscription : janvier 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 78
Points : 8
Points : 8
Alors alors ... J'ai trouvé la solution (et l'erreur était entre le clavier et la chaise pour changer).

Le code que tu as donné rawsrc est le bon, c'est ma fonction pg_array_parse qui n'allait pas. En effet, je changeait les virgules par des ','. A partir du moment où j'ai enlever ce traitement, ma liste se remplit bien en base, en laissant entre " " chaque valeur.

Je met pour info le code de la fonction pg_array_parse (que j'utilise donc dans ce cas là avec asText = False) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function pg_array_parse($array, $asText = true) {
    $s = $array;
    if ($asText) {
        $s = str_replace("{", "array('", $s);
        $s = str_replace("}", "')", $s);   
        $s = str_replace(",", "','", $s);   
    } else {
        $s = str_replace("{", "array(", $s);
        $s = str_replace("}", ")", $s);
    }
    $s = "\$retval = $s;";
    eval($s);
    return $retval;
}
cyscek est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


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


 
 
 
 
Partenaires

Hébergement Web