![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 11.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam taki kod:
Problem polega na tym ze jak robie dodawanie do bazy to pojawia sie taki blad:
jednak gdy robie bindowanie z reki bez petli foreach:
to zamiast 400 roznych rekordow pojawia mi sie tylko w bazie 1, pierwszy. Caly kod powinien sie wykonac okolo 400 razy bo tyle rekordow pobralem z xml. Tablice stworzona mam dobrze bo var_dump ja ladnie wyswietlil. Problem twki w samym dodawaniu. Dlaczego dodaje mi jeden rekord i jak z powyzszego zapytania pozbyc sie tego bledu? Ten post edytował mattix19 31.03.2013, 13:03:39 -------------------- CI
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli zmienna nie jest typu int/string/bool/null zmiennej $param przypisujesz pusty string. Następnie masz IFa, który zbinduje wartość tylko w przypadku, gdy zmienna $param ma wartość, a ta nie będzie miała wartości (pusty string jest tożsamy z FALSE przy zwykłym porównaniu), jeżeli zmienna będzie obiektem, tablicą bądź typem float/double. else $param = ''; zamień na else $param = PDO::PARAM_STR;.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 11.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
dobra to dziala ale w petli for nadal dodaje mi tylko jeden 1 rekord. Czy musze zamknac jakos polaczenie z baza zeby dodal wszystkie? closeCursor nie dziala.
-------------------- CI
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ale nie widać tutaj żadnej pętli, która miałaby dodać więcej niż jeden rekord. Jeżeli taka istnieje, to domyślam się, że obejmuje ona pow. kod, w takim wypadku:
1. PrepareStatement powinieneś przenieść przed pętle - nie ma potrzeby każdorazowo tego wykonywać. 2. PDOStatement::closeCursor() powinieneś umieścić zaraz za PDOStatement::execute() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 11.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
wyglada to dokladnie tak:
i w bazie pojawia sie tylko jeden rekord. Powinno okolo 400. -------------------- CI
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Nie wiem czy skonfigurowałeś PDO by rzucało wyjątkami czy nie, upewnij się jednak, że PDOStatement::execute() zawsze zwraca TRUE.
2. Nie widzę, byś gdziekolwiek zmieniał zawartość zmiennych przekazywanych jako parametry zapytania. Cały czas operujsz na tych samych danych. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 11.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
nie no zmienne sa tworzone juz w petli porostu nie dodalem tu. dane sa dobrze zrobione zapytanie tez lecz nie mam pojecia czemu to nie rusza.... execute() zwraca true tylko za 1 obiegiem petli potem juz false...
-------------------- CI
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
No to jeżeli PDOStatement::execute() zwraca FALSE masz jakiś błąd. Sprawdź jaki to dokładnie błąd: http://www.php.net/manual/en/pdo.error-handling.php
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 06:55 |