8
votes

Créer une matrice de MySQL Query PHP

J'ai un petit problème que je ne comprends pas. J'ai une dB qui a un propriétaire et un type (et plus sûr). Je souhaite obtenir une liste de toutes les valeurs de type qui possède le propriétaire égal à l'utilisateur actuel, mais je n'obtiens que deux résultat xxx

imprime: xxx

et xxx

imprime: xxx

et le résultat devrait être quelque chose comme 19, 19, 18, 17, 16 dans un tableau. C'est tous les types qui me sont aussi définis que le propriétaire.

J'ai ce fonctionnement maintenant: xxx

Ici, je imprime toutes les valeurs correctement, mais je dois créer un tableau avec toutes les valeurs. Je pouvais utiliser Array_Push, mais il y a plus de meilleure façon de le faire. Je pensais avoir toutes les valeurs de type avec une simple requête MySQL.


0 commentaires

7 Réponses :


2
votes

Vous avez besoin de itérer à travers ...

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

if ($result) {
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type'];
}


0 commentaires

0
votes
$type_array = array();    
while($row = mysql_fetch_assoc($result)) {
    $type_array[] = $row['type'];
}

0 commentaires

0
votes
while($row = mysql_fetch_assoc($result)) {
  echo $row['type'];
}

1 commentaires

Son code fait déjà cela. Il veut qu'il devienne un tableau. L'écho ne va pas résoudre ce problème.



32
votes

Très souvent, cela se fait dans un tandis que boucle: xxx

aperçu des exemples dans le documentation .

Le mysql_fetch _ * obtiendra toujours l'élément suivant de l'ensemble de résultats:

renvoie une gamme de chaînes qui correspond à la rangée extraite, ou false si il n'y a plus de lignes.

C'est pourquoi le pendant que boucles fonctionne. S'il n'y a aucune ligne de lignes $ rangée sera false et le pendant la boucle existe.

Il semble que que mysql_fetch_array obtient plus d'une ligne, car par défaut, il obtient le résultat que normal et comme valeur associative :

à l'aide de MySQL_BOTH (par défaut), vous obtiendrez un tableau avec des indices associatifs et numériques.

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


0 commentaires

0
votes

Vous pouvez également rendre la vie plus facile à utiliser un wrapper, par ex. avec Adodb:

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


0 commentaires

7
votes
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

4 commentaires

OUI! C'est la bonne façon.


Il n'utilise pas mysqli il utilise hérité mysql


Legacy mysql? Vous devez signifier MySQL obsolète.


Yep Old MySQL - plus vieux que la version que la réponse concernée



0
votes

Vous voudrez peut-être consulter l'article d'injection SQL sur Wikipedia. Regardez sous la partie "Conversion hexadécimale" pour trouver une petite fonction pour effectuer vos commandes SQL et renvoyer une matrice avec les informations dedans.

https://fr.wikipedia.org/wiki/sql_injection

J'ai écrit la fonction dosql () car je me suis fatigué d'avoir mes commandes SQL exécutant partout sur la place, oubliant de vérifier les erreurs et de connecter toutes mes commandes à un fichier journal pour une visualisation ultérieure si nécessaire . La routine est gratuite pour celui qui veut l'utiliser pour le but. En fait, j'ai un peu étendu la fonction parce que je voulais qu'il fasse plus, mais cette fonction de base est un bon point de départ pour récupérer la sortie d'un appel SQL.


0 commentaires