Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO , problem przy upload
Forum PHP.pl > Forum > PHP
jeremiash
Cześć. Zaczynam przygodę z PDO i podczepianiem więc proszę o wyrozumiałość. Przy próbie UPLOADowania danych napotykam na problem.

Komunikat: blad db : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( `id_pan`, `nazwa_en`, `nazwa_de`, `nazwa_fr`, `nazwa_esp`, `nazwa_pl`, `opinia' at line 1

ewentualnie komunikat typu: blad db : SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

Sprawdziłem ilość parametrów (wykonałem opcję z dodaniem id_mia i bez id_mia , - to parametr który wskazuje mi miejsce edycji danych w bazie.
Dokonałem sprawdzenia typów zmiennych wejściowych (zgadzają się) oraz przeprowadziłem próbę na bindValue oraz bindParam

Gdzie popełniam błąd? Proszę o pomoc.

kod funkcji:
  1. public function AktualizujMiasto($polaczenie,$id_pan,$id_mia,$nazwa_en,$nazwa_de,$nazwa_fr,$nazwa_esp,$nazwa_pl,$opinia_pl,$opinia_en,$status,$y,$x,$data1,$data2,$data3) {
  2.  
  3. try
  4. {
  5.  
  6. $this->polaczenie=$polaczenie;
  7. $this->id_pan=$id_pan;
  8. $this->id_mia=$id_mia;
  9. $this->nazwa_pl=$nazwa_pl;
  10. $this->nazwa_en=$nazwa_en;
  11. $this->nazwa_de=$nazwa_de;
  12. $this->nazwa_fr=$nazwa_fr;
  13. $this->nazwa_esp=$nazwa_esp;
  14. $this->opinia_pl=$opinia_pl;
  15. $this->opinia_en=$opinia_en;
  16. $this->status=$status;
  17. $this->y=$y;
  18. $this->x=$x;
  19. $this->data1=$data1;
  20. $this->data2=$data2;
  21. $this->data3=$data3;
  22.  
  23. $stmt = $this->polaczenie->prepare('UPDATE `miasto` ( `id_pan`, `nazwa_en`, `nazwa_de`, `nazwa_fr`, `nazwa_esp`, `nazwa_pl`, `opinia_pl`, `opinia_en`, `status`, `y`, `x`, `data1`, `data2`, `data3`)
  24. VALUES (
  25. :id_pan,
  26. :nazwa_en,
  27. :nazwa_de,
  28. :nazwa_fr,
  29. :nazwa_esp,
  30. :nazwa_pl,
  31. :opinia_pl,
  32. :opinia_en,
  33. :status,
  34. :y,
  35. :x,
  36. :data1,
  37. :data2,
  38. :data3)
  39. WHERE `id_mia` =: id_miasta ');
  40. /*
  41. $stmt->bindValue(':id_miasta', $this->id_mia, PDO::PARAM_INT);
  42. $stmt->bindValue(':id_pan', $this->id_pan, PDO::PARAM_INT); // STR - ԡ񣵣h
  43. $stmt->bindValue(':nazwa_en', $this->nazwa_en, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  44. $stmt->bindValue(':nazwa_de', $this->nazwa_de, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  45. $stmt->bindValue(':nazwa_fr', $this->nazwa_fr, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  46. $stmt->bindValue(':nazwa_esp', $this->nazwa_esp, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  47. $stmt->bindValue(':nazwa_pl', $this->nazwa_pl, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  48. $stmt->bindValue(':opinia_pl', $this->opinia_pl, PDO::PARAM_STR, 400); // STR - ԡ񣵣h
  49. $stmt->bindValue(':opinia_en', $this->opinia_en, PDO::PARAM_STR, 400); // STR - ԡ񣵣h
  50. $stmt->bindValue(':status', $this->status, PDO::PARAM_INT, 3);
  51. $stmt->bindValue(':y', $this->y, PDO::PARAM_STR,10);
  52. $stmt->bindValue(':x', $this->x, PDO::PARAM_STR,10);
  53. $stmt->bindValue(':data1', $this->data1, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  54. $stmt->bindValue(':data2', $this->data2, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  55. $stmt->bindValue(':data3', $this->data3, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  56. */
  57.  
  58. $stmt->bindValue(':id_miasta', $this->id_mia, PDO::PARAM_INT);
  59. $stmt->bindParam(':id_pan', $this->id_pan, PDO::PARAM_INT); // STR - ԡ񣵣h
  60. $stmt->bindParam(':nazwa_en', $this->nazwa_en, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  61. $stmt->bindParam(':nazwa_de', $this->nazwa_de, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  62. $stmt->bindParam(':nazwa_fr', $this->nazwa_fr, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  63. $stmt->bindParam(':nazwa_esp', $this->nazwa_esp, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  64. $stmt->bindParam(':nazwa_pl', $this->nazwa_pl, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  65. $stmt->bindParam(':opinia_pl', $this->opinia_pl, PDO::PARAM_STR, 400); // STR - ԡ񣵣h
  66. $stmt->bindParam(':opinia_en', $this->opinia_en, PDO::PARAM_STR, 400); // STR - ԡ񣵣h
  67. $stmt->bindParam(':status', $this->status, PDO::PARAM_INT, 3);
  68. $stmt->bindParam(':y', $this->y, PDO::PARAM_STR,10);
  69. $stmt->bindParam(':x', $this->x, PDO::PARAM_STR,10);
  70. $stmt->bindParam(':data1', $this->data1, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  71. $stmt->bindParam(':data2', $this->data2, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  72. $stmt->bindParam(':data3', $this->data3, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  73.  
  74.  
  75. $ilosc = $stmt -> execute();
  76.  
  77. if($ilosc > 0)
  78. {
  79. $_SESSION['info']='edycja miasta powiodła się ';
  80. }
  81. else
  82. {
  83. $_SESSION['info']='problem z edycją miasta';
  84. }
  85.  
  86. }
  87. catch(PDOException $e)
  88. {
  89. echo 'blad db : ' . $e->getMessage();
  90. }
  91.  
  92.  
  93. }
mortus
Nieprawidłowa składnia UPDATE. Parametrem metody prepare ma być prawdiłowe (dla danego silnika bazy danych) zapytanie, tymczasem nie ma takiej formy UPDATE w MySQL.
jeremiash
ohmy.gif o kurcze...

_____________________________________
Na początku chcę podziękować MOTRUS-owi , za szybką i fachową pomoc. Przez niedopatrzenie traciłem mnóstwo czasu... Dzięki Ci bardzo!

Skoro temat już wisi to wrzucam poprawną składnię. Jakiemuś 'głąbowi' podobnemu do mnie , ewentualnie osobie uczącej się może się przydać smile.gif

  1. abstract class funkcyjka{
  2.  
  3. private $polaczenie;
  4. private $nazwa_pl;
  5. private $nazwa_en;
  6. private $nazwa_de;
  7. private $nazwa_fr;
  8. private $nazwa_esp;
  9. private $opinia_pl;
  10. private $opinia_en;
  11. private $status;
  12. private $data1;
  13. private $data2;
  14. private $data3;
  15. private $id_pan;
  16. private $id_mia;
  17. private $x;
  18. private $y;
  19.  
  20. public function AktualizujMiasto($polaczenie,$id_pan,$id_mia,$nazwa_en,$nazwa_de,$nazwa_fr,$nazwa_esp,$nazwa_pl,$opinia_pl,$opinia_en,$status,$y,$x,$data1,$data2,$data3) {
  21.  
  22. try
  23. {
  24.  
  25. $this->polaczenie=$polaczenie;
  26. $this->id_pan=$id_pan;
  27. $this->id_mia=$id_mia;
  28. $this->nazwa_pl=$nazwa_pl;
  29. $this->nazwa_en=$nazwa_en;
  30. $this->nazwa_de=$nazwa_de;
  31. $this->nazwa_fr=$nazwa_fr;
  32. $this->nazwa_esp=$nazwa_esp;
  33. $this->opinia_pl=$opinia_pl;
  34. $this->opinia_en=$opinia_en;
  35. $this->status=$status;
  36. $this->y=$y;
  37. $this->x=$x;
  38. $this->data1=$data1;
  39. $this->data2=$data2;
  40. $this->data3=$data3;
  41.  
  42. $stmt = $this->polaczenie->prepare("UPDATE miasto SET id_pan= :id_pan , nazwa_en= :nazwa_en , nazwa_de= :nazwa_de , nazwa_fr= :nazwa_fr , nazwa_esp= :nazwa_esp , nazwa_pl= :nazwa_pl , opinia_pl= :opinia_pl , opinia_en= :opinia_en ,
  43. status= :status , y= :y , x= :x , data1= :data1 , data2= :data2 , data3= :data3
  44. WHERE id_mia = :id_miasta ");
  45.  
  46. $stmt->bindParam(':id_miasta', $this->id_mia, PDO::PARAM_INT);
  47. $stmt->bindParam(':id_pan', $this->id_pan, PDO::PARAM_INT); // STR - ԡ񣵣h
  48. $stmt->bindParam(':nazwa_en', $this->nazwa_en, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  49. $stmt->bindParam(':nazwa_de', $this->nazwa_de, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  50. $stmt->bindParam(':nazwa_fr', $this->nazwa_fr, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  51. $stmt->bindParam(':nazwa_esp', $this->nazwa_esp, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  52. $stmt->bindParam(':nazwa_pl', $this->nazwa_pl, PDO::PARAM_STR, 100); // STR - ԡ񣵣h
  53. $stmt->bindParam(':opinia_pl', $this->opinia_pl, PDO::PARAM_STR, 400); // STR - ԡ񣵣h
  54. $stmt->bindParam(':opinia_en', $this->opinia_en, PDO::PARAM_STR, 400); // STR - ԡ񣵣h
  55. $stmt->bindParam(':status', $this->status, PDO::PARAM_INT, 3);
  56. $stmt->bindParam(':y', $this->y, PDO::PARAM_STR,10);
  57. $stmt->bindParam(':x', $this->x, PDO::PARAM_STR,10);
  58. $stmt->bindParam(':data1', $this->data1, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  59. $stmt->bindParam(':data2', $this->data2, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  60. $stmt->bindParam(':data3', $this->data3, PDO::PARAM_STR, 40); // STR - ԡ񣵣h
  61.  
  62.  
  63. $ilosc = $stmt -> execute();
  64.  
  65. if($ilosc > 0)
  66. {
  67. $_SESSION['info']='edycja miasta powiodła się ';
  68. }
  69. else
  70. {
  71. $_SESSION['info']='problem z edycją miasta';
  72. }
  73.  
  74. }
  75. catch(PDOException $e)
  76. {
  77. echo 'blad db : ' . $e->getMessage();
  78. }
  79.  
  80.  
  81. }
  82.  
  83. } // end funkcyjka


Pozdrawiam serdecznie
szok
Jak dla mnie to powinines tę klase przebudować.

1. Zrobić getery i setery, a nie przekazywać mnóstwo zmiennych w metodzie klasy. Co w chwili gdy nie nie chce aktualizować pierwszych 5 zmiennych? Muszę na siłe je wpisywać.
2. Masz pola prywatne w z tymi wpisami, następnie, przekazujesz je w metodzie, i zapisujesz to tych pól prywatnych, i zapisuje te pola prywatne. Po co? Skoro szybciej, prościej i łatwie było by w tym przypadku zapisać poprostu te zmienne które przekazujesz w metodzie? (i tak nie powinno być ich tyle)
3. Połączenie z baza danych ($polaczenie) nie przekazywał bym jako 1 pole w metodzie, tylko np w konstruktorze klasy, zachowując to połączenie dla inncyh metod w klasie.
jeremiash
Jest to moja pierwsza aplikacja w OOP więc dziękuję za rady. Owszem pkt. 3 - masz rację. Co do pkt. 2 myślę nad nim. Pkt. 1 (wczytuję dane do formularza, więc dokonuję zmian, reszta pozostaje. Nie widzę problemu.

Pozdrawiam i dzięki za zainteresowanie oraz porady
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.