2010-08-20 3 views
0

J'ai plusieurs champs dans une table DB PostgreSQL à laquelle je veux accéder dans une boucle PHP, car je veux que la même chose arrive à chacun d'entre eux.

Ils sont nommés similairement (3 minuscules), par exemple "mor", "gls", etc, et les différents noms sont stockés dans un tableau appelé $ fields.

Le noyau du code J'utilise est la suivante (je récupérer chaque ligne de la table, puis essayer de boucle à travers les champs):

$sql="select * from mytable order by id"; 
$result=pg_query($db_handle,$sql); 
while ($row=pg_fetch_object($result)) 
{ 
    foreach ($fields as $field) 
    { 
    $myfield=$row->$field; 
    <do something with $myfield> 
    } 
} 

Malheureusement, le row- de $ > Le champ $ ne fonctionne pas. Je reçois le texte suivant:

PHP Notice: Undefined property: stdClass::$mor 
PHP Notice: Undefined property: stdClass::$gls 

J'ai essayé diverses permutations de crochets et de citations, mais je ne peux pas sembler trouver la poussière magique. Est-ce faisable?

Merci.

Répondre

1
var_dump($row); 

et de vérifier si $row est ce que vous attendez.

+0

objet (stdClass) # 1 (11) {... [ "mor"] => string (63) "bla bla" ...} Oui, il va revenir avec les données correctes. – donnek

+0

Ok, mais il n'a pas de champ comme 'mor' -' mor' est une clé d'un tableau ici - essayez '$ row [$ field]'. – hsz

+0

"mor", "gls", etc sont des champs de 3 lettres dans la ligne, et sont répertoriés dans le tableau $ fields. J'essaie d'utiliser ça pour les insérer dans la construction $ row-> afin de ne pas avoir à les nommer par nom. Malheureusement, $ row [$ field] ne fonctionne pas. – donnek

1

Essayez $myfield=$row->{$field}

+0

Non, malheureusement cela ne fonctionne pas - je l'ai déjà essayé. – donnek

+0

Quelle est la structure de mytable? – Hans

+0

CREATE TABLE mytable ( id série NOT NULL, caractère nom variable (50), texte de surface, texte mor, texte de gls, texte de commentaire, ); Je veux faire des choses similaires à tous les champs avec des noms de 3 lettres, qui sont stockés dans les champs de tableau $. La raison principale pour laquelle je veux les boucler est que cette table sera construite dynamiquement, et que le nombre de noms à trois lettres peut varier, et que des noms inconnus peuvent apparaître - les seules constantes sont qu'elles seront toutes en 3 lettres, et qu'ils seront listés dans les champs $ après l'analyse précédente du fichier. – donnek

0

Vous devez parcourir la ligne, il vous donnera les noms de colonnes (clé) et leurs valeurs (valeur)

vous ne pouvez pas itérer à travers les champs $, car il n'existe pas.

$sql="select * from mytable order by id"; 
$result=pg_query($db_handle,$sql); 
while ($row=pg_fetch_object($result)) 
{ 
    foreach ($row as $key => $value) 
    { 
    $myfield=$value; 
    <do something with $myfield> 
    } 
} 
+0

Je ne pense pas - je peux faire quelque chose à la valeur de $ myfield, à condition que je spécifie directement, si j'utilise while ($ row = pg_fetch_object ($ result)) { $ myfield = $ row-> mor } Mais alors je dois spécifier $ row-> gls directement, et les autres. J'essaie d'éviter de faire cela en ayant PHP boucle à travers $ row-> x, où x est l'un des éléments dans le tableau $ fields. C'est comme ça que j'ai du mal à me mettre au travail. – donnek

2

Pourquoi ne pas chercher un tableau avec pg_fetch_assoc au lieu d'un objet que vous pouvez juste faire;

$myfield=$row[$field]; 
+0

Le point est que je veux travailler sur les valeurs de certains champs sans avoir à spécifier leurs noms. Si je spécifie les noms, utiliser $ row-> mor devrait être équivalent à $ row [mor]. Mais essayer d'utiliser une variable ne semble pas fonctionner. – donnek

+1

La méthode de Simon devrait fonctionner, avez-vous essayé? D'une certaine façon, l'objet n'aime pas votre accès à la propriété de la variable, mais je n'ai jamais eu de problème avec un tableau. – Hans

+0

Oui, et si vous ne voulez vraiment pas demander un tableau, vous pouvez simplement convertir l'objet en tableau. – Simon

Questions connexes