2010-11-21 5 views
0

J'essaye de stocker des données d'une table de MySQL dans une variable de tableau de PHP.Array ou Assoc?

Actuellement, j'ai ceci:

$row = $db->query("SELECT * FROM settings"); 
$sysconfig = $row->fetch_array(); 

le schéma de base de données est en tant que telle:

property value 
online  1 
autoupd 1 
setting 1 

etc.

Comment dois-je écrire le code ci-dessus, de sorte que je peut utiliser la valeur, pour la propriété dans les données, à savoir

$sysconfig['online'] retournerait " 1"?

Un var_dump($sysconfig) cède cette

array(6) { [0]=> string(6) "online" ["property"]=> string(6) "online" [1]=> string(1) "1" ["propertyid"]=> string(1) "1" [2]=> string(1) "1" ["value"]=> string(1) "1" } 

Un print_r($sysconfig) cède cette

Array ([0] => online [property] => online [1] => 1 [propertyid] => 1 [2] => 1 [value] => 1) 

Merci

+1

Um ... exactement comme vous avez écrit déjà? :) –

+0

Je reçois ceci: Undefined index: en ligne comme un avis PHP. – bear

+0

mettre à jour votre question avec 'var_dump ($ sysconfig)' – ajreal

Répondre

2

fetch_array renvoie les deux tableaux associatifs et énumérés. Vous pouvez le spécifier pour renvoyer uniquement le tableau assoc en ajoutant le paramètre MYSQL_ASSOC. Ou vous pouvez utiliser la méthode fetch_assoc.

UPD: Pour votre régime, vous avez seulement la « propriété » et les colonnes de la « valeur », vous devez donc réécrire votre requête de sélection avec des jointures ou itérer ensemble de données comme ceci:

$sysconfig = array(); 
while ($line = $row->fetch_assoc()) 
    $sysconfig[ $line['property'] ] = intval($line['value']); 

//$sysconfig['online'] == 1 
+0

Impossible d'utiliser l'objet de type mysqli_result comme tableau – bear

+0

@Shamil: Désolé, la faute de frappe, doit être $ line au lieu de $ row dans while-loop. – Andrew

+0

Cela fonctionne :) Merci! – bear

2

ce que fait le ressemble à une classe que vous utilisez? Je suggère généralement d'utiliser quelque chose comme:

$sysconfig = mysql_fetch_assoc($row); 

qui retournerait un tableau pour cette ligne. Est-ce que votre classe $ db a une méthode pour cela? Qu'advient-il si vous procédez comme suit:

print_r($sysconfig); 

Vous devriez voir une ventilation du tableau retourné, qui mettra en évidence les méthodes que vous pouvez utiliser pour accéder aux données à l'intérieur.

EDIT:

Remplacer cette ligne:

$sysconfig = $row->fetch_array(); 

Avec:

while($data = $row->fetch_array()){ 
    $sysconfig[$data['property']] = $data['value']; 
} 

Vous devriez alors être en mesure d'accéder aux résultats que vous voulez.

+0

J'utilise une classe normale: '$ db = new mysqli (détails de connexion, nom de table)' – bear

+0

Pouvez-vous publier le résultat de print_r ($ sysconfig) ou de var_dump ($ sysconfig)? – a1phanumeric

+0

J'ai ajouté 'print_r' à la question. – bear

1
$result = $db->query("SELECT * FROM settings"); 

while ($row = mysql_fetch_assoc($result)) { 
    echo $row["online"]; 
    echo $row["autopd"]; 
    echo $row["setting"]; 
    // etc. 
} 
+0

Pas besoin d'écho. Même alors, le tableau de variables ne sauvegarde pas. – bear

+0

echo était juste un exemple d'utilisation. Pouvez-vous préciser ce que vous entendez par "tableau de variables ne sauvegarde pas"? Est-ce qu'il entre dans la boucle while (sinon votre requête ne renvoie pas les résultats). Si vous entrez dans le look, vous pouvez peut-être faire print_r ($ row); dans la boucle. –

1
$row = $db->query("SELECT * FROM settings"); 
while($data = $row->fetch_array()) 
    $sysconfig[$data['property']] = $data['value'];