Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]PDO UPDATE problem, jw
miras
post
Post #1





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


  1. public function update_weather($id, $data) {
  2. if (!empty($_POST['check'])) {
  3. $i = 0;
  4. $len = count($data);
  5. foreach($data as $name => $val):
  6. if ($i!=$len-1) {
  7. if ($i==$len-2) {
  8. $n .= $name.'=?';
  9. $v .= $val;
  10. } else {
  11. $n .= $name.'=?,';
  12. $v .= $val.",";
  13. }
  14. }
  15. $i++;
  16. endforeach;
  17.  
  18. $this->activ = $this->pdo->prepare("UPDATE weather SET $n WHERE id=?");
  19. $this->activ->execute(array($v, $id));
  20.  
  21. }
  22. }



Błąd:

Invalid parameter number: number of bound variables does not match number of tokens' in ....

Ma ktoś pomysł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post
Post #2





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




masz jedno ? a przypisujesz dwie wartosci... komunikat bledy wyrazne ci na to wskazuje. Masz miec tylko wartosci ile masz znakow zapytania
Go to the top of the page
+Quote Post
kapslokk
post
Post #3





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Masz jeden pytajnik, a przesyłasz w array'u 2 wartości?
Go to the top of the page
+Quote Post
miras
post
Post #4





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


No ok, ale

  1. var_dump(count(explode(",", $v))); == 66
  2.  
  3. i
  4.  
  5. var_dump(count(explode(",", $n))); == 66
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




zrozum, ze znaki zapytania maja isc do PREPARE. Do EXECUTE przekazywac masz tylko wartosci.
A teraz w prepare masz tylko jedno ? a w execute dajesz dwie wartosci...
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Ale masz $n w zapytaniu, a nie pytajnik, czyli do zbindowania zostaje CI jeden pytajnik, a chcesz bindować 2 wartości.

@nospor
Czy Ty zawsze musisz być szybszy?

Ten post edytował kapslokk 16.11.2015, 18:14:28
Go to the top of the page
+Quote Post
miras
post
Post #7





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


Znaki zapytania przechowuje właśnie zmienna $n, dump tej zmiennej:


  1.  
  2. data=?,gdansk_d=?,gdansk_n=?,suwalki_d=?,suwalki_n=?,olsztyn_d=?,olsztyn_n=?,szczecin_d=?, itd do 66...
  3.  


dump $v


  1. 0000-00-00,6,6,6,6,6,66,6,6,6,6,6,6,666,6,666,6,6,6,66,6,6,6,6,66,6,6, itd do 66...


Ten post edytował miras 16.11.2015, 18:17:52
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




Ok, ale do EXECUTE masz przekazac tablice wartosci. A ty teraz przekazujesz tekst oddzielony przecinkami pod $v (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
miras
post
Post #9





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


czyli to co jest pod $v zmienić na $v[] = $val, nie łapie już...
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




No bo potem w EXECUTE wkladasz tablice w tablice. No skup sie troche. Ma byc jedno wymiarowa tablica (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
miras
post
Post #11





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


  1. $this->activ->execute($v, array($id));


Również bez rezultatu....
Go to the top of the page
+Quote Post
kapslokk
post
Post #12





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


  1. $values = explode(',',$v);
  2. $values[] = $id;
  3. $this->activ->execute($values);

Tylko zamiast explodować, zrób sobie wcześniej tak, żeby Ci zamiast tego stringu generowało tablicę, na koniec doklej do niej $id.

Ten post edytował kapslokk 16.11.2015, 18:37:40
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: 3.10.2025 - 20:00