Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd w zapytaniu PDO - General error: 2014
Forum PHP.pl > Forum > Przedszkole
polishmilk
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.
nospor
no ale zobacz w manualu co robi EXEC i co robi QUERY i jakie parametry przyjmują a nie strzelasz na oslep...
Smertius
$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ł
polishmilk
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
nospor
Skoro korzystasz z PDO to korzystaj tez w pelni z jego dobrodziejstw. Jednym z nich jest wlasnie bindowanie, ktore ustrzega cię przed atakim sqlinjection
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.