Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP_PDO] Jak mogę sprawdzić za pomocą PDO. czy rekord już istnieje?, Szukałem na różnych forach i nic nie działało.
-Gość-
post
Post #1





Goście







* Napewno połączenie z PDO mam poprawne.
Ale nie działa mi sprawdzenie czy rekord istnieje,
próbowałem według zagranicznych for na przykład z:
  1. SELECT COUNT(`rekord`) FROM `tabela` WHERE `rekord`= 'nazwa';

w PDO próbowałem z funkcjami (oddzielnie)
  1. if ($stmt->rowCount() == 0){die('Rekord nie istnieje');}
  2. if ($stmt->fetchColumn() == 0{die('Rekord nie istnieje');}


ale nie działa, proszę o pomoc, są inne wyjścia z tej sytuacji?
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  1. $stmt = $pdo->prepare('SELECT COUNT(*) FROM tbl_name WHERE ...');
  2. $stmt->execute();
  3.  
  4. if ($stmt->fetchColumn() > 0) {
  5. // istnieje
  6. }
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







Cytat(Crozin @ 18.03.2014, 15:52:29 ) *
  1. $stmt = $pdo->prepare('SELECT COUNT(*) FROM tbl_name WHERE ...');
  2. $stmt->execute();
  3.  
  4. if ($stmt->fetchColumn() > 0) {
  5. // istnieje
  6. }


właśnie to samo robię tylko że z różnicą na "Nie istnieje"

  1. $stmt = $pdo->prepare("SELECT COUNT(*) FROM `users` WHERE `numer`=$numer;");
  2. $stmt->execute();
  3. if ($stmt->fetchColumn() < 0)
  4. {
  5. //if'y jak nie istnieje, m.in błąd o rejestracji
  6. if ($_GET['msg'] != 'zarejestruj')
  7. {
  8. die('Napisz "zarejestruj" aby się zarejestrować');
  9. }
  10. }
  11. //if'y jak istnieje.



Kod który przedstawiłem jest prawie identyczny do mojego tylko bardziej rozwinięty, został skrócony dla celów prezentacji.

Użytkownik nie istnieje a przechodzi tam gdzie "//if'y jak istnieje."
Go to the top of the page
+Quote Post
Turson
post
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Jak masz już SELECT CONT() to żadne liczenie wierszy/kolumn ze strony pdo nie jest potrzebne.
  1. $stmt = $pdo->prepare("SELECT COUNT(*) FROM `users` WHERE `numer`=$numer;");
  2. $stmt->execute();
  3. print_r($stmt);

wyprintuj tablicę to dostaniesz wynik
strzelam z pamięci, że będzie to $stmt[0]

Innym sposobem możesz:
  1. $stmt = $pdo->query("SELECT * FROM `users` WHERE `numer`=$numer;");
  2. $stmt->fetchAll();
  3. $wynik = $stmt->rowCount();
Go to the top of the page
+Quote Post
-Gość-
post
Post #5





Goście







wynik z print_r():

PDOStatement Object
(
[queryString] => SELECT COUNT(*) FROM `users` WHERE `numer`=100;
)

tam gdzie 100 wyswietliło mój numer.

a ta druga opcja też przeskakuje do if'a.
Wrazie czego sprawdziłem w bazie czy czasem już nie istnieje w jej mój numer, ale pusta baza 0 rekordów.
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. $stmt = $pdo->prepare("SELECT COUNT(*) FROM `users` WHERE `numer`=$numer;");
  2. $stmt->execute();
  3. $dane = $stmt->fetchAll();
  4. print_r($dane );
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Count ZAWSZE zwraca liczbę. Czasami jest to 0.
Więc zawsze ilość rekordów >0.
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Funkcja COUNT zwróci zawsze wynik nieujemny ([0; ∞]), Ty zaś sprawdzasz w swoim IF-ie czy zwrócona wartość jest mniejsza od zera...
  1. if ($stmt->fetchColumn() === 0) {
  2. // nie istnieje
  3. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 18:11