Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PDO UPDATE problem
Forum PHP.pl > Forum > Przedszkole
miras
  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ł?
nospor
masz jedno ? a przypisujesz dwie wartosci... komunikat bledy wyrazne ci na to wskazuje. Masz miec tylko wartosci ile masz znakow zapytania
kapslokk
Masz jeden pytajnik, a przesyłasz w array'u 2 wartości?
miras
No ok, ale

  1. var_dump(count(explode(",", $v))); == 66
  2.  
  3. i
  4.  
  5. var_dump(count(explode(",", $n))); == 66
nospor
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...
kapslokk
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?
miras
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...
nospor
Ok, ale do EXECUTE masz przekazac tablice wartosci. A ty teraz przekazujesz tekst oddzielony przecinkami pod $v smile.gif
miras
czyli to co jest pod $v zmienić na $v[] = $val, nie łapie już...
nospor
No bo potem w EXECUTE wkladasz tablice w tablice. No skup sie troche. Ma byc jedno wymiarowa tablica smile.gif
miras
  1. $this->activ->execute($v, array($id));


Również bez rezultatu....
kapslokk
  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.
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.