chaque équivalent de () pour les résultats de MySQL, pour imiter première boucle de foreach ()
Question
Je l'ai vu dans le code je travaille, ce qui suit:
foreach( $mysql_result as $row ) $site_id = $row->id;
$ mysql_result est, bien sûr, un mysql_result, donc ce foreach équivaut à un certain temps (mysql_fetch_row ())
Parfois, le résultat est connu pour produire une seule ligne, mais le code a encore un « foreach » il donne l'impression d'être une boucle à travers plusieurs lignes.
J'essayé d'utiliser each () mais ne fonctionne pas pour cela.
Je sais que je pourrais utiliser mysql_fetch_row (), mais le code doit être indépendant DB donc je ne peux pas utiliser des fonctions spécifiques DB. Y at-il quelque chose comme each () qui fonctionne dans ce cas, tout comme la première itération de foreach ()?
PS: ce que je fais actuellement la lisibilité est à son tour l'exemple précédent à ceci:
foreach( $mysql_result as $row ) break;
$site_id = $row->id;
Il est assez évident que le foreach sera à la boucle plus qu'une seule fois.
La solution
Je pense que ce que vous voulez est au lieu de ceci:
foreach( $mysql_result as $row ) $site_id = $row->id;
Juste ceci:
$site_id = $mysql_result[0]->id;
Autres conseils
PS: ce que je fais actuellement La lisibilité est tour précédent par exemple à ceci:
foreach ($ mysql_result de que $ row) break;
Enveloppez que dans une fonction il est donc clair qu'il obtient une ligne (et sont encore indépendants db)
function fetch_single_row($result)
{
foreach( $mysql_result as $row ) break;
return $row;
}
Alors votre code ressemblerait
$row = fetch_single_row($mysql_result);
$site_id = $row->id;
Maintenant, vous n'aurez pas à interroger sur toute la pause foreach étrange (..); déclarations tout le code.
Si vous voulez un seul résultat, vous n'avez pas besoin de boucle.
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$site_id = $row['id'];
Vous pouvez utiliser une boucle do
$i =0
do {
$site_id = $mysql_result[$i++]->id;
} while ($i <= 0);
Est-ce que vous voulez?
if ( 1 == count( $mysql_result ) )
{
$row = current( $mysql_result );
// could probably also do this unless the array isn't zero-indexed
// $row = $mysql_result[0];
}