comment faire pour récupérer toutes les ligne de résultat en php mysql?
Dans ma table j'ai 2 dossiers avec companyid = 1
, mais lorsque j'exécute le code php ci-dessous pour companyid = 1
il ne retourne que le premier !
Comment puis-je récupérer tous les enregistrements?
Le fichier php:
if (isset($_GET["companyid"])) {
$companyid = $_GET['companyid'];
//get a product from products table
$result = mysql_query("SELECT * FROM `products`
WHERE companyid = $companyid;");
if (!empty($result)) {
if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_assoc($result)){
$product = array();
$product["pid"] = $row["pid"];
$product["productname"] = $row["productname"];
}
$response["product"] = array();
array_push($response["product"], $product);
//success
$response["success"] = 1;
echo json_encode($response);
} else {
//no product found
$response["success"] = 0;
$response["message"] = "No product found";
//echo no product JSON
echo json_encode($response);
}
} else {
//no product found
$response["success"] = 0;
$response["message"] = "No product found";
//echo no users JSON
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
//echoing JSON response
echo json_encode($response);
}
À l'aide de mysql_fetch_array
se passe la même chose.
il retourne {"product":[{"pid":"12371","productname":"test"}],"success":1}
lorsque j'exécute une requête sans paramètres select * from table
à l'aide de mysql_fetch_array
il renvoie toutes les lignes ..
Vous avez besoin d'une boucle sur les résultats et la lecture de chaque ligne. Changer votre if (mysql_num_rows...) appel à une boucle for.
ne pas le faire
double possible de Extraire toutes les lignes en fonction de la requête dans un tableau
S'il vous plaît arrêter d'écrire du nouveau code avec les anciennes
Aussi, si vous êtes en utilisant PDO, vous pouvez simplement appeler
ne pas le faire
$result = mysql_fetch_assoc($result);
vous détruisez votre $result
de données lorsque vous faites cela. renommer $row
ou quelque chosedouble possible de Extraire toutes les lignes en fonction de la requête dans un tableau
S'il vous plaît arrêter d'écrire du nouveau code avec les anciennes
mysql_*
fonctions. Il n'est plus maintenu et la communauté a commencé la dépréciation du processus . Au lieu de cela, vous devriez en apprendre davantage sur les instructions préparées soit PDO ou MySQLi. Si vous ne pouvez pas décider, cet article l'aider à choisir. Si vous tenez à le savoir, voici un très bon AOP-tutoriel.Aussi, si vous êtes en utilisant PDO, vous pouvez simplement appeler
fetchAll
et être fait avec elle 🙂OriginalL'auteur mprog | 2012-06-07
Vous devez vous connecter pour publier un commentaire.
Comme NikiC souligné vous ne devriez pas utiliser les fonctions mysql_ plus, vous pouvez récupérer l'intégralité de la gamme dans les deux PDO et mysqli, Voici un exemple pour récupérer toutes les lignes à l'aide de la mysqli->fetch_all fonction, espérons que cette aide!
fetch_all n'a pas d'abord travailler sur ubuntu pour moi - j'ai besoin de faire: sudo apt-get install php5-mysqlnd et redémarrer apache
$result = $this->sqlConn->query($sqlString);
ne fonctionne pas pour moi, j'ai eu à utiliser$result = $sqlConn->query($sqlString);
J'ai dû installer php5-mysqlnd ainsi, je vous remercie!
que doit faire partie de la réponse lol....
OriginalL'auteur Andy Braham
php.net/mysql_fetch_assoc
Je vous recommande d'utiliser PDO au lieu de mysql_
Pourrait être
is_resource($result)
OriginalL'auteur Fernando André
Vous avez besoin de faire une boucle par la suite de tirer de toutes les lignes:
Sur une note de côté, vous devriez être en utilisant au moins mysqli ou PDO au lieu de mysql_* les fonctions.
OriginalL'auteur Tim Withers
Je crois fermement que le traitement par lot avec la Doctrine ou de tout type d'itérations avec MySQL (PDO ou mysqli) sont juste une illusion.
@dimitri-k a fourni une belle explication en particulier à propos de l'unité de travail. Le problème, c'est la miss de leader: "$query->iterate()" qui n'a pas vraiment d'itérer sur la source de données. C'est juste un \Traversable wrapper autour de déjà entièrement récupérés de la source de données.
Un exemple qui démontre que même la suppression de la Doctrine de la couche d'abstraction complètement de l'image, nous allons encore fonctionner dans des problèmes de mémoire:
De sortie:
Ici, le décevant getIterator() méthode:
Vous pouvez utiliser ma petite bibliothèque à fait flux de lourdes tables à l'aide de PHP Doctrine ou DQL ou juste pur SQL. Toutefois vous trouvez approprié: https://github.com/EnchanterIO/remote-collection-stream
OriginalL'auteur BlocksByLukas