Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO][PHP]Sprawdzenie wielu tablic czy nic nie zwraca - jak?
Forum PHP.pl > Forum > Przedszkole
ZaXaZ
while+pdo fetch assoc = Gdy są rekordy zwraca mi tablice np.

Kod
Array
(
    [id] => 168
    [log] => test
    [when] => 2014-07-02 15:15:18
    [nick] => ZaXaZ
)
Array
(
    [id] => 169
    [log] => ...
    [when] => 2014-07-02 15:16:07
    [nick] => Ksar
)


co jest poprawne, jednak gdy niema nie zwraca nic, jak mogę sprawdzić czy nic nie zwraca? empty() nie działa.
Turson
count
ZaXaZ
  1. <?php
  2. $stmt=$PDO->query("SELECT * FROM (SELECT logs.id, logs.log, logs.when, users.nick FROM `logs` LEFT JOIN `users` ON logs.numer=users.numer ORDER BY `id` DESC LIMIT 30) AS logi ORDER BY logi.id;");
  3. while($row = $stmt->fetch(PDO::FETCH_ASSOC))
  4. {
  5. if (count($row)==0) die('Brak logów!!');
  6. echo '[id:'.$row['id'].'] <'.$row['nick'].'> '.date_format(date_create_from_format('Y-m-d H:i:s', $row['when']), 'd/m/Y [H:i:s]')."\r\n".$row['log']."\r\n\r\n";
  7. }
  8. ?>


Nadal nic nie zwraca, co robie źle?
Turson
Wróć, count zawsze zwróci prawę, bo będziesz miał w tablicy indeksy wszystkich kolumn, ale wartości będą puste. Pozostaje empty
np.
  1. foreach($row as $k=>$v){
  2. if(empty($v)) die('puste '.$k);
  3. }
aniolekx
najpierw array_filter, a później count
Crozin
PDO ma dosyć słabo zaprojektowane API i najczęściej powinieneś korzystać z fetchAll() po czym operować na "czystej" tablicy, zamiast bezpośrednio na obiekcie PDOStatement:
  1. $stmt = $pdo->prepare(...);
  2. $stmt->execute();
  3.  
  4. $rs = $stmt->fetchAll();
  5.  
  6. if (count($rs) === 0) {
  7. echo 'zapytanie nie zwróciło żadnych rekordów';
  8. } else {
  9. foreach ($rs as $row) {
  10. ...
  11. }
  12. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.