Sprawdzanie non-object Fetch()

0

W jaki sposób mógłbym rozwiązać problem dt. zwracania przez funkcje fetch() false, to znaczy w jaki sposób mogę nie wykonywać while, jeśli w zapytaniu pojawi się coś innego niż obiekt np. false...

 $result=$db->query( "select * from użytkownicy" );

"Call to a member function fetch() on a non-object in" -  Ustawiłem, ze  zapytanie query zwraca false, gdy brak wyniku... Niestety 
while ( $row=$result->fetch() && $result->fetch() !== false)
  {
        echo "<tr>";
	foreach ( $row as $col ) echo "<td>$col</td>";
	echo "</tr>";  	
}

Fragment ten w tej chwili nie sprawdza poprawnie i nie działa tak jakbym chciał:

$result->fetch() != false 
1

dlatego, że dwa razy w jednym warunku wykonujesz $result->fetch() --- PHP nie wykonuje tego raz, i zapamiętuje wynik do porównań - tylko wykonuje za każdym wystąpieniem.

wobec tego pierwszy wiersz wybierasz, drugi tylko porównujesz do false, trzeci wybierasz, czwarty porównujesz do false..

a wyświetlają Ci się tylko niepatrzyste wiersze

1

spróbuj takiego zapisu:

while (false !== ($row = $result->fetch())) {
...
}
1

e, ja to w ogóle się zagapiłem. koleś ma false już w $result przecież, a nie w zwrotce od ->fetch().

dziwi mnie tylko, że po PRAWIDŁOWYM wykonaniu zapytania kiedykolwiek pojawia się tam nie-obiekt (zakładam, że wspomniane false) o.O

tu wystarczy zwykłe

$result=$db->query( "select * from użytkownicy" );i
if ($result) {
  while ($row=$result->fetch())
  {
    echo "<tr>";
    foreach ( $row as $col ) echo "<td>$col</td>";
    echo "</tr>";      
  }
}

$result będzie albo obiektem, albo false, także porównanie z pilnowaniem typów nie jest konieczne (ale można zastosować)
podobnie z fetch() - zwróci albo tablicę (ale nigdy pustą, jakaś kolumna będzie, choćby i pusta) albo false
ew. tak jak post wyżej zrobić w tym przypadku

1

if ($zmienna) przejdzie, jeżeli zmienna NIE JEST:

  • false
  • null
  • 0
  • 0.0 [float]
  • "0" (ale uwaga, "00" albo "0.0" jako string przejdzie)
  • pustą tablicą
  • "" [pusty string]
  • niezadeklarowana

1 użytkowników online, w tym zalogowanych: 0, gości: 1