Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP+PDO]Sprawdzenie czy nie zwraca rekordów.
Forum PHP.pl > Forum > Przedszkole
ZaXaZ
sprawdzałem mój wynik przez print_r($wynik);
i kompletnie NIC nie zwraca (tak miało być)
jednak jak mogę sprawdzić czy nie zwraca, wogóle nic (do die())?
Kshyhoo
Pokaż kod.
ZaXaZ
Cytat(Kshyhoo @ 12.04.2014, 19:18:12 ) *
Pokaż kod.


  1. $q = $PDO->prepare('SELECT `nick` FROM `users` WHERE `numer` = :c');
  2. $q->bindParam(':c', $toCheck);
  3. $toCheck=$row['user'];
  4. $q->execute();
  5. $kto = $q->fetchAll(PDO::FETCH_COLUMN, 0);
  6. $toCheck=$row['user2'];
  7. $q->execute();
  8. $kto2 = $q->fetchAll(PDO::FETCH_COLUMN, 0);


zwraca tylko gdy są rekordy, gdy niema nie zwraca nic wogóle a chce na to die('Brak!'); dać.


--edit--
Jakby co, wyswietlam przez:

echo $kto[0].', '.$kto2[0]."\r\n";

a wszystko w while które sprawdza $row

ber32
Może lepiej tak sprawdzaj
  1. if($stmt->rowCount()>0) {
  2.  
  3. }

ZaXaZ
Cytat(ber32 @ 12.04.2014, 20:36:31 ) *
Może lepiej tak sprawdzaj
  1. if($stmt->rowCount()>0) {
  2.  
  3. }


rowCount() nie w każdej bazie działa z SELECT (tylko UPDATE, DELETE, INSERT Jak dobrze pamiętam) ale ogarne z fetchColumn tongue.gif, dzięki za odp.

--edit--
if ($kto[0]->fetchColumn()==0 && $kto2[0]->fetchColumn==0) die('Brak');

nadal leży, albo coś źle robię..
nospor
Przeciez fetchAll zwraca tablice....

if (empty( $kto)) echo 'Ojej, tablica jest pusta a przez to nie zwrocono zadnego rekordu...';

ps:
$q->bindParam(':c', $toCheck);
$toCheck=$row['user'];

a co to za potworki? Bindujesz zmienną, ktorej wartosc okreslasz dopiero linijke pozniej....
ZaXaZ
Cytat(nospor @ 13.04.2014, 11:46:26 ) *
Przeciez fetchAll zwraca tablice....

if (empty( $kto)) echo 'Ojej, tablica jest pusta a przez to nie zwrocono zadnego rekordu...';

ps:
$q->bindParam(':c', $toCheck);
$toCheck=$row['user'];

a co to za potworki? Bindujesz zmienną, ktorej wartosc okreslasz dopiero linijke pozniej....


1. nadal nie działa, przypominam że wyświetla tylko rekordy jak są, udostępniam cały kod jednak zmieniam dla bezpieczeństwa nazwy w sql ale działa tak samo, ps. autoren kodu sql jest jak się nie mylę trueblue, z tydzień temu gdzieś na forum był taki kod, a ja chce zamienić pobierane wartości user i user2 na nick odpowiedni nick..

  1. <?php
  2. $multi = $PDO->query('SELECT CONCAT(LEAST(who.user,who2.user),GREATEST(who.user,who2.user)) AS multi, who.user, who.user2 FROM `users` who JOIN `users` who2 ON who2.user = who.user2 AND who2.user2 = who.user GROUP BY multi');
  3. echo 'konta multi:'."\r\n\r\n";
  4. while($row = $multi->fetch(PDO::FETCH_ASSOC))
  5. {
  6. $q = $PDO->prepare('SELECT `nick` FROM `users` WHERE `user` = :c');
  7. $q->bindParam(':c', $toCheck);
  8. $toCheck=$row['user'];
  9. $q->execute();
  10. $kto = $q->fetchAll(PDO::FETCH_COLUMN, 0);
  11. $toCheck=$row['user2'];
  12. $q->execute();
  13. $kto2 = $q->fetchAll(PDO::FETCH_COLUMN, 0);
  14. if (empty($kto) && empty($kto2)) die('Brak!.'); //to nie działa :/
  15. echo $kto[0].', '.$kto2[0]."\r\n";
  16. }
  17. ?>


2. wiem, wygląda to BAAARDZO dziwnie, jednak tak było w książce z której się uczę podstaw pdo, i odziwo ani jednego błędu nie wyrzuca, działa poprawnie, pewnie dlatego że jest w prepare [kod] i execute.

jakby co tu daje kod jaki tam jest jakby ktoś chciał wiedzieć.


  1. <?php
  2. $db_conn = new PDO('mysql:host=localhost;dbname=recipes', 'użytkownik-php', 'sekret');
  3.  
  4. // Pobranie jednego przepisu
  5. $sql = 'SELECT recipes.name, recipes.description, categories.name as category
  6. FROM recipes
  7. INNER JOIN categories ON categories.id = recipes.category_id
  8. WHERE recipes.chef = :chef
  9. AND categories.name = :category_name';
  10.  
  11. $stmt = $db_conn->prepare($sql);
  12.  
  13. // Związanie wartości chef, chcemy tylko przepisy Sylwii
  14. $stmt->bindValue(':chef', 'Sylwia');
  15. $stmt->bindParam(':category_name', $category);
  16.  
  17. // Przystawki
  18. $category = 'Przystawka';
  19. $stmt->execute();
  20. $starters = $stmt->fetchAll();
  21.  
  22. // Deser
  23. $category = 'Deser';
  24. $stmt->execute();
  25. $pudding = $stmt->fetchAll();
  26. ?>
com
$kto = $q->fetchAll(PDO::FETCH_COLUMN, 0);
$toCheck=$row['user2'];
$q->execute();
$kto2 = $q->fetchAll(PDO::FETCH_COLUMN, 0);
if (empty($who) && empty($who2)) die('Brak!.');

Po pierwsze to zupełnie inne zmienne sprawdzasz... Po drugie tak jak już nospor wspomniał najpierw bindujesz a potem dopiero ustawiasz co w tym ma być to przecież tak nie działa
ZaXaZ
Cytat(com @ 13.04.2014, 14:59:14 ) *
$kto = $q->fetchAll(PDO::FETCH_COLUMN, 0);
$toCheck=$row['user2'];
$q->execute();
$kto2 = $q->fetchAll(PDO::FETCH_COLUMN, 0);
if (empty($who) && empty($who2)) die('Brak!.');

Po pierwsze to zupełnie inne zmienne sprawdzasz... Po drugie tak jak już nospor wspomniał najpierw bindujesz a potem dopiero ustawiasz co w tym ma być to przecież tak nie działa


zedytowalem już 10 minut temu to, bo zmienne też zmienialem... a co do drugiego, też działa, i jak pisałem uczę się podstaw pdo. i dałem kod jaki jest tam w książce oraz jaki ja zrobiłem.., zapewniam że działa gdy są rekordy które mają z dwóch stron wpisany swój numer multi konta, a gdy niema nic nie wyświetla a mam włączone raportowanie. I wyrzuca każdy błąd.,

ps. kod pisany na od.....ol, dałoby się może w samym SQL ale niewiem jak zrobić żebym mógł wyświetlić te dwie osoby które mają multi konta z dwóch stron dodane (jako potwierdzenie) więc zaszczyciłem się tym nietypowym kodem php.
jednak zostaje ten problem z brakiem wyświetlania rekordów.
com
no dobrze tylko takie rozwiązanie jest trochę dziwne, ale ok niech będzie.. zrób var_dump($kto); i kto2

#edit do ps możesz jaśniej bo nie bardzo rozumiem co masz na myśli, tzn co chcesz uzyskać wgl wink.gif
ZaXaZ
Cytat(com @ 13.04.2014, 15:24:34 ) *
no dobrze tylko takie rozwiązanie jest trochę dziwne, ale ok niech będzie.. zrób var_dump($kto); i kto2

#edit do ps możesz jaśniej bo nie bardzo rozumiem co masz na myśli, tzn co chcesz uzyskać wgl wink.gif


1. niewiem czy to możliwe ale nie zwraca nic ohmy.gif, tylko ten napis "konta multi:"
2. ogólnie chce zrobić die jak $kto i $kto2 puste na brak, ale jakby ktoś umiał skrócić kod żeby nie był w php tam tylko odrazu by podmienialo na nick w sql ale żeby się wyswietalo w oddzielnych zmiennych jak $kto i $kto2 + to die... to już najlepiej by było.
com
http://ideone.com/mojTC2

taki by musiał być efekt ale z tego wynika że on wgl tu nie wchodzi : while($row = $multi->fetch(PDO::FETCH_ASSOC)) zrób przed tym
  1. var_dump($multi->fetch(PDO::FETCH_ASSOC));
ZaXaZ
Cytat(com @ 13.04.2014, 15:37:29 ) *
http://ideone.com/mojTC2

taki by musiał być efekt ale z tego wynika że on wgl tu nie wchodzi : while($row = $multi->fetch(PDO::FETCH_ASSOC)) zrób przed tym
  1. var_dump($multi->fetch(PDO::FETCH_ASSOC));


"konta multi:

bool(false)"
com
no to już masz odpowiedź czemu nic sie tam nie dzieje, bo warunek masz w tej pętli a pętla się nie wykonuje wcale wiec nie może tego sprawdzić, tylko teraz pytanie czy zapytanie wgl działa dla danych poprawnych?
ZaXaZ
Cytat(com @ 13.04.2014, 15:49:11 ) *
tylko teraz pytanie czy zapytanie wgl działa dla danych poprawnych?


tzn działa tak:

jeśli user podał numer user2 i na odwrót, itd. to wyswietli nick wszystkich osób które mają wpisane wzajemnie siebie jako swój numer multi konta, przykład, jak to działa:

user, user2
user3, user4
user5, user6
user49, user57
user200, user 137

jednak teraz nikt niema podanego multi i nic nie zwraca.
com
to daj jakieś to multi do bazy... a warunek daj po prostu przed tym
  1. if(!$multi->fetch(PDO::FETCH_ASSOC)) die('brak');
ZaXaZ
Cytat(com @ 13.04.2014, 16:00:39 ) *
to daj jakieś to multi do bazy... a warunek daj po prostu przed tym
  1. if(!$multi->fetch(PDO::FETCH_ASSOC)) die('brak');


już chyba blisko celu,
gdy niema rekordów: "brak";
gdy są: nie wyświetla nic,

gdy zakomentuje tamtą linijke,
gdy niema: nic nie zwraca;
gdy są: zwraca np. user, user2 ....

pewnie jak dodam dodatkową zmienną z tym samym zapytaniem itd to problem ustąpi ale czy to jedyne wyjście?

--edit--
stworzylem zmienną $exists która wygląda tak samo jak $multi i działa po die jak trzeba wszystko, jednak zależy mi na prędkości... da się jakoś żeby była tylko zmienna multi? bo po if'ie z die się jakby sam unset() robi (ja tak to widzę)... a chciałbym żebym dalej mógł z niej korzystać...
com
pokaż może cały kod po zmianach smile.gif

i w zasadzie to by powinno być if($multi->fetchColumn()) i wtedy ta pętla else die("brak");

die przerywa wykonywanie skryptu, wiec raczej to powinno być echo skoro nie chcesz go zatrzymać po tym wink.gif
ZaXaZ
Cytat(com @ 13.04.2014, 16:33:50 ) *
pokaż może cały kod po zmianach smile.gif


  1. <?php
  2. echo 'konta multi:'."\r\n\r\n";
  3. $multi = $PDO->query('SELECT CONCAT(LEAST(who.user,who2.user),GREATEST(who.user,who2.user)) AS multi, who.user, who.user2 FROM `users` who JOIN `users` who2 ON who2.user = who.user2 AND who2.user2 = who.user GROUP BY multi');
  4. if ($multi->fetchColumn())
  5. {
  6. while($row = $multi->fetch(PDO::FETCH_ASSOC))
  7. {
  8. $q = $PDO->prepare('SELECT `nick` FROM `users` WHERE `user` = :c');
  9. $q->bindParam(':c', $toCheck);
  10. $toCheck=$row['user'];
  11. $q->execute();
  12. $kto = $q->fetchAll(PDO::FETCH_COLUMN, 0);
  13. $toCheck=$row['user2'];
  14. $q->execute();
  15. $kto2 = $q->fetchAll(PDO::FETCH_COLUMN, 0);
  16. echo $kto[0].', '.$kto2[0]."\r\n";
  17. }
  18. }
  19. else echo 'Brak';
  20. ?>



--edit--
po wszystkich zmianach (kod powyżej),
gdy niema multi zwraca "brak", gdy są dalej nic...
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.