2010-08-05 4 views
5

J'ai un petit problème que je ne comprends pas. J'ai une base de données qui a un propriétaire et le type (et plus hors cours). Je veux obtenir une liste de toutes les valeurs de type qui a propriétaire égal à l'utilisateur actuel, mais je ne reçois que deux résultatscréer un tableau à partir de mysql query php

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' ORDER BY id DESC "; 

$result = mysql_query($sql,$con); 

print_r(mysql_fetch_array($result)); 

imprime:

Array ([0] => 18 [type] => 18) 

et

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' "; 

impressions:

Array ([0] => 16 [type] => 16) 

Et le résultat devrait être quelque chose comme 19, 19, 18, 17, 16 dans un tableau. Thats tous les types qui m'a en tant que propriétaire.

J'ai ce travail maintenant:

for ($x = 0; $x < mysql_num_rows($result); $x++){ 
$row = mysql_fetch_assoc($result); 
echo $row['type']; 
} 

Ici, j'imprimer toutes les valeurs correctement, mais je dois créer un tableau avec toutes les valeurs. Je pense que je pourrais utiliser array_push, mais il y a une meilleure façon de le faire. Je pensais que j'obtiendrais toutes les valeurs de type avec une simple requête mysql.

Répondre

22

Très souvent, cela se fait dans une boucle while:

$types = array(); 

while(($row = mysql_fetch_assoc($result))) { 
    $types[] = $row['type']; 
} 

Jetez un oeil sur les exemples le documentation.

Les méthodes mysql_fetch_* toujours obtenir le élément suivant du jeu de résultats:

Retourne un tableau de chaînes qui correspond à la ligne récupérée, ou FALSE s'il n'y a pas plus de lignes.

C'est pourquoi les boucles while fonctionnent. S'il n'y a plus de lignes, $row sera false et la boucle while existe.

Il semble seulement que mysql_fetch_array obtient plus d'une ligne, car par défaut, il obtient le résultat que normal and as associative value:

En utilisant MYSQL_BOTH (par défaut), vous obtiendrez un tableau avec des indices associatifs et nombre .

Votre exemple montre le mieux, vous obtenez la même valeur 18 et vous pouvez y accéder via $v[0] ou $v['type'].

2

Vous avez besoin d'itérer ...

$typeArray = array(); 
$query = "select * from whatever"; 
$result = mysql_query($query); 

if ($result) { 
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type']; 
} 
0
$type_array = array();  
while($row = mysql_fetch_assoc($result)) { 
    $type_array[] = $row['type']; 
} 
0
while($row = mysql_fetch_assoc($result)) { 
    echo $row['type']; 
} 
+0

Son code est déjà en train de le faire. Il veut que ça devienne un tableau. Echoing ne va pas résoudre ce problème. – Treffynnon

0

Vous pourriez également faciliter la vie en utilisant un emballage, par ex.avec ADODb:

$myarray=$db->GetCol("SELECT type FROM cars ". 
    "WHERE owner=? and selling=0", 
    array($_SESSION['username'])); 

Une bonne enveloppe fera tout pour vous échapper, rendant les choses plus faciles à lire.

2
THE CORRECT WAY ************************ THE CORRECT WAY 

while($rows[] = mysqli_fetch_assoc($result)); 
array_pop($rows); // pop the last row off, which is an empty row 
+0

OUI! C'est la bonne façon. –

+0

Il n'utilise pas mysqli il utilise l'héritage mysql – DropHit

+2

Legacy mysql? Vous devez vouloir dire Mysql déprécié. –

0

Vous voudrez peut-être jeter un oeil à l'article de SQL Injection sur Wikipedia. Regardez dans la partie "Conversion hexadécimale" pour trouver une petite fonction pour faire vos commandes SQL et retourner un tableau avec les informations qu'il contient.

https://en.wikipedia.org/wiki/SQL_injection

j'ai écrit la fonction dosql() parce que je suis fatigué d'avoir mes commandes SQL d'exécution dans tous les sens, en oubliant de vérifier les erreurs, et d'être capable de se connecter toutes mes commandes dans un fichier journal pour regarder plus tard si besoin est. La routine est gratuite pour quiconque veut l'utiliser à quelque fin que ce soit. J'ai en fait développé un peu la fonction car je voulais en faire plus mais cette fonction de base est un bon point de départ pour récupérer la sortie d'un appel SQL.

Questions connexes