Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z PDO
Forum PHP.pl > Forum > Przedszkole
Hazik
Hej przerabiam aktualnie skrypt na PDO. Niestety po przeróbce nie działa. Ktoś może pomóc?

Przed zmianą:
  1. <?php
  2.  
  3.  
  4. /*Połączenie z bazą danych*/
  5.  
  6. $dzisiaj = date("Y-m-d");
  7. $godzina = "11:00";
  8.  
  9.  
  10. $connection = @mysql_connect('localhost', 'login', 'pass')
  11. or die('Brak połączenia z serwerem MySQL');
  12. $db = @mysql_select_db('db', $connection)
  13. or die('Nie mogę połączyć się z bazą danych');
  14.  
  15.  
  16. $wynik = mysql_query("SELECT * FROM tabela WHERE `tabela`.`data` = '".$dzisiaj."' AND `tabela`.`godzina` = '".$godzina."'")
  17.  
  18. echo $dzisiaj;
  19.  
  20. if(mysql_num_rows($wynik) > 0) {
  21. // akcja po znalezieniu dodawanego rekordu w tabeli
  22. echo 'taki rekord juz jest';
  23.  
  24. } else {
  25. // akcja po stwierdzeniu że rekordy w tabeli nie ma
  26. echo ' rekord jest wolny';
  27.  
  28. }
  29.  
  30.  
  31.  
  32. ?>




Po zmianie:
  1. <?php
  2.  
  3.  
  4. /*Połączenie z bazą danych*/
  5.  
  6. $dzisiaj = date("Y-m-d");
  7. $godzina = "11:00";
  8. echo $dzisiaj;
  9. try
  10. {
  11. if($_SERVER['REQUEST_METHOD'] == 'POST')
  12. {
  13. $pdo = new PDO('mysql:host=localhost;dbname=db', 'login', 'pass');
  14. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  15.  
  16. $stmt = $pdo -> query('SELECT * FROM tabela WHERE `tabela`.`data` = '.$dzisiaj.' AND `tabela`.`godzina` = '.$godzina.'');
  17. $row = $stmt->fetch(PDO::FETCH_ASSOC);
  18.  
  19.  
  20.  
  21. if(! $row) {
  22. // akcja po znalezieniu dodawanego rekordu w tabeli
  23. echo 'taki rekord juz jest';
  24.  
  25. } else {
  26. // akcja po stwierdzeniu że rekordy w tabeli nie ma
  27. echo 'rekord wolny';
  28. }}}
  29. catch(PDOException $e)
  30. {
  31. echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
  32. }
  33.  
  34.  
  35.  
  36. ?>



Kshyhoo
Cytat(Hazik @ 14.05.2017, 20:59:48 ) *
Niestety po przeróbce nie działa.

Rozwiń...
Hazik
Nie wyświetla żadnego błędu, nie wyświetla też żadnego komunikatu. Pokazuje tylko datę.
trueblue
W drugiej wersji sprawdzasz istnienie rekordu pod warunkiem wywołania skryptu metodą POST.
Hazik
Po usunięciu POST otrzymałem następujący błąd:
Wystapil blad biblioteki PDO: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':00' at line 1
trueblue
No to porównaj jak tworzyłeś zapytania w obydwu wersjach.
Hazik
Cytat(trueblue @ 14.05.2017, 22:02:31 ) *
No to porównaj jak tworzyłeś zapytania w obydwu wersjach.


Porównywałem już wiele razy i dalej nie mam rozwiązania. Jakaś podpowiedź?
nospor
W pierwszzej wersji date i godzine masz w ciapkach. W drugiej nie... hm... ciekawe czy to moze powodowac blad.... tongue.gif

Hazik
Ok poprawiłem błąd i dodałem kolejną funkcję. Tu wywala kolejny błąd:(
2017-05-14rekord wolnyWystapil blad biblioteki PDO: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':'Klient', :'2017-05-14', ' at line 2

  1. <?php
  2.  
  3.  
  4. /*Połączenie z bazą danych*/
  5.  
  6. $dzisiaj = date("Y-m-d");
  7. $godzina = "17:00";
  8.  
  9. echo $dzisiaj;
  10. try
  11. {
  12.  
  13. $pdo = new PDO('mysql:host=localhost;dbname=db', 'login', 'pass');
  14. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  15.  
  16. $stmt = $pdo -> query('SELECT *FROM tabelaWHERE `tabela`.`data` = "'.$dzisiaj.'" AND `tabela`.`godzina` = "'.$godzina.'"');
  17. $row = $stmt->fetch(PDO::FETCH_ASSOC);
  18.  
  19.  
  20.  
  21. if($row >0) {
  22. // akcja po znalezieniu dodawanego rekordu w tabeli
  23. echo 'taki rekord juz jest';
  24.  
  25. } else {
  26. // akcja po stwierdzeniu że rekordy w tabeli nie ma
  27. echo 'rekord wolny';
  28.  
  29.  
  30. $stmt = $pdo -> prepare("INSERT INTO tabela (klient, data, godzina) VALUES(
  31. :?,
  32. :?,
  33. :?,
  34. )"); // 1
  35. $stmt->execute(array(
  36. "Klient",
  37. date("Y-m-d"),
  38. "17:00",
  39. ));
  40.  
  41. }}
  42. catch(PDOException $e)
  43. {
  44. echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
  45. }
  46.  
  47.  
  48.  
  49. ?>
  50.  



nospor
Jak uzywasz ? to bez :.
: dajesz gdy uzywasz nazw.
Hazik
Dziękuję, niestety po zmianie w dalszym ciągu:


2017-05-14rekord wolnyWystapil blad biblioteki PDO: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 5
nospor
No ale masz teraz inny blad, no nie?
Ostatni znak zapytania ma zbedny przecinek.

Ja rozumiem ze jest juz pozna pora, ale skup sie troche. kazda pierde mam palcem pokazywac?
Hazik
Ok teraz rozumiem zasadę łapania wyjątków. Myślałem, że mam jakiś strasznie poważny błąd. Teraz już wiem, czego szukać. Dzięki wielkie:)
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.