ďťż

[PHP][PDO] Podpinanie nie działa? Dlaczego?

       

Podstrony


telcocafe

Aktualizuje się poprawnie tylko pierwszy rekord.

Kod:
http://phpfi.com/250247

Czy podpinanie nie działa poprawnie na tablicach, gdzie zmienia się indeks w postaci zmiennej $i?



Ależ podpinanie działa na tablicach (osobiście miałem błąd, że nie trawiło podpinanie nazwy zmiennej, wystarczyło ją zmienić :]).

Twój problem polega na tym, że nigdzie w kodzie nie zmieniasz zmiennej $i. W forze jest w końcu tylko lokalna zmienna int. Wsadź w Fora global $i; i po krzyku.

Zdawało mi się, że $i w pętli FOR jest globalna - a przynajmniej miałem do niej dostęp poza pętlą w innych elementach skryptu.

Nie! Czekaj! Wszystko źle. Zaćmienie umysłu miałem....

Przypatrz się jaką zmienną podpiąłeś w bindowaniu :]
$xp_id[0]

Tą zmienną podpiąłeś. Podpina się w końcu zmienną jeden raz. Tak więc powinieneś zmieniać zawartość tej właśnie zmiennej. Tak nakazuje logika. Tak więc skrypt to "gruntownej" przebudowy.



Dopiero zaczynam przejście na podpinanie zapytań INSERT, REPLACE oraz UPDATE w PDO. :) Jednak widać, że trzeba podpinać zwykłe zmienne w przypadku iteracji bądź podpinać dane wiele razy - co lepsze dla wydajności?
Użytkownik Ferrari edytował ten post 17 lipiec 2007, 17:37
Z doświadczenia mi wiadomo, że do jednego zapytania podpinania nic nie daje poza ochroną przed włamaniami. Podpinanie ma sens gdy np. dodajesz więcej niż jeden rekordów, np. 10. Najwięcej zajmuje samo wysłanie zapytania a nie jego wykonanie.

Obaczyć to można tak:
for (1000) { INSERT INTO (1,2) }

INSERT INTO (:1,:2) bind(:1,$a) bind(:2,$b) for (1000) { $a=1 $b=1 sql.execute() }

Wtedy widać różnicę w czasie.

W przypadku jednego zapytanie lepiej nie bindować, ale wsadzić co trzeba w tablicę, a tablicę execute() wsadzić.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.