Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Błąd w zapytaniu PDO - General error: 2014
polishmilk
post 23.03.2010, 10:14:52
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 27.04.2007

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


Witam,
dopiero zaczynam z PDO więc proszę o wyrozumiałość ;p
Mam taki kodzik:
  1. $pdo=new PDO('mysql:host=localhost;dbname=', '', '');
  2. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  3. try{
  4.  
  5. $query=$pdo->exec("SELECT pesel FROM nauczyciel WHERE pesel ='$pesel'");
  6. //$query->bindValue(':pesel', $pesel, PDO::PARAM_STR);
  7. //$wynik=$query->execute();
  8. $wynik=$pdo->query($query);
  9. $ile=$wynik->num_rows;
  10. if($ile>0){
  11. echo ('Nauczyciel o podanym PESELU: '.$pesel.' jest już w bazie');
  12. $query->closeCursor();
  13. }
  14. else{
  15. $wstawienie=$pdo->prepare("INSERT INTO `nauczyciel` VALUES('', '$imie', '$nazwisko', '$pesel',
  16. '$data_urodzenia', '$miejsce_urodzenia','$ulica', '$nr_domu', '$nr_mieszkania', '$miasto',
  17. '$kod_pocztowy', '$e_mail', '$tel_kontaktowy')");
  18. $rezultat = $wstawienie -> execute();
  19. if($rezultat>0){
  20. echo ('Dodanie zakończone sukcesem');
  21. }
  22.  
  23. else{
  24. echo ('Nie można dodać');
  25. }
  26. }
  27. }
  28. catch(PDOException $e){
  29. echo 'Błąd: <br />'.$e->getMessage();
  30. }

Problem tkwi w tym, że źle stosuje selecta. Albo każdy wprowadzony(w formularzu) pesel "jest już w bazie" albo nie sprawdza i dodaje wszystko(z bindValue dodaje wszystko). Dodam jeszcze że INSERT działa bez zarzutu.

Ten post edytował polishmilk 23.03.2010, 10:19:44
Go to the top of the page
+Quote Post
nospor
post 23.03.2010, 10:32:22
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ale zobacz w manualu co robi EXEC i co robi QUERY i jakie parametry przyjmują a nie strzelasz na oslep...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Smertius
post 23.03.2010, 10:36:56
Post #3





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


$pdo->exec zwraca do zmiennej $query ilość zmodyfikowanych rekordów a nie rezultat zapytania czy też zapytanie. Daj przed
$wynik=$pdo->query($query); print_r($query) to sam zobaczysz jaką wartość ma ta zmienna.


  1. $query=$pdo->prepare("SELECT pesel FROM nauczyciel WHERE pesel =:pesel");
  2. $query->bindValue(':pesel', $pesel, PDO::PARAM_INT);
  3. $wynik=$query->execute();


Powinno teraz działać

PS.
Nospor mnie wyprzedził

Ten post edytował Smertius 23.03.2010, 10:38:31
Go to the top of the page
+Quote Post
polishmilk
post 23.03.2010, 10:58:41
Post #4





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 27.04.2007

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


Dziękuje za pomoc ale zrobiłem to nieco inaczej:
  1. $query=$pdo->query("SELECT pesel FROM nauczyciel WHERE pesel = '$pesel'");
  2. $wynik=$query->fetch(PDO::FETCH_ASSOC);


Skorzystam z rad ale tak jak mówiłem dopiero się go uczę i frajdą jest jak coś wyjdzie dopiero potem postaram się to udoskonalać winksmiley.jpg

Ten post edytował polishmilk 23.03.2010, 11:13:47
Go to the top of the page
+Quote Post
nospor
post 23.03.2010, 11:06:38
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Skoro korzystasz z PDO to korzystaj tez w pelni z jego dobrodziejstw. Jednym z nich jest wlasnie bindowanie, ktore ustrzega cię przed atakim sqlinjection


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 23:05