![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mam taką tablice:
Chciałbym dodać dane z tej tablicy do tabeli w bazie danych jednym zapytaniem insert za pomocą PDO W przypadku jednego rekordu zrobiłbym tak:
Jak wygląda składnia zapytania insert dla wielu rekordów z bindowaniem danych z tablicy w PDO? -------------------- Artur
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli masz przygotowane zapytanie (prepare) możesz je wykonywać dowolną ilość razy.
http://php.net/manual/en/pdo.prepare.php (przykłady) Execute przyjmuje tablicę danych. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
hmm coś takiego?
Ten post edytował @rtur 11.04.2015, 21:57:40 -------------------- Artur
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
A czy coś takiego jest w przykładach? Parametry muszą się zgadzać też czyli nie raz songtitle, innym razem title.
http://wwwgo.pl/article/10/php_data_object...luge_baz_danych -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, oczywiście będzie title w parametrach, moja pomyłka pisarska.
W wyniku tego execute() x4 (tyle jest elementów w tablicy) wykona się 4x zapytanie tylko za każdym razem z innymi parametrami, czyli mamy 4 zapytania do bazy? Przy zwykłym mysql_query jest coś takiego i tu mam jedno zapytanie do bazy. Przepraszam, do tej pory używałem głównie mysql_ a teraz dopiero zaczynam swoją przygodę z PDO -------------------- Artur
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, czy w PDO moje zapytanie może mieć taką konstrukcję?
Ten post edytował @rtur 13.04.2015, 21:50:27 -------------------- Artur
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Może. Kod można uprościć pętlą
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście zrobię go pętlą for, chodziło mi tylko o konstrukcję zapytania. Dzięki za pomoc
![]() -------------------- Artur
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli naprawdę chcesz zyskać na wydajności to https://dev.mysql.com/doc/refman/5.6/en/load-data.html
Dopóki nie robisz tysięcy rekordów nie warto sobie głowy zawracać. Zwłaszcza że te dane nie wyglądają na zmienne. -------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy jest sens to będzie co 20 minut 20 rekordów próbowało wrzucić... to chyba nie dużo...
Korzystam z tej klasy https://github.com/indieteq/PHP-MySQL-PDO-Database-Class i o ile udało mi się zrobić pętlę Values (:artysta1,:tytul1),....(:artysta20,:tytul20) do zapytania insert dla wielu to nie mogę sobie podpięciem parametrów...
W jaki sposób do zmiennej $tablicaDlaWieluParametrow przypisać coś takiego:
aby zadziałało tak:
domyślam się że pętlą ale nie chce mi wyjść coś co zadziała jako drugi parametr w funkcji $db->query(); Ten post edytował @rtur 25.04.2015, 16:50:44 -------------------- Artur
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Skoro jest to 20 rekordów co 20 minut to nie ma sensu nawet nad tym myśleć. Dla bazy to nic. Gdybyś tam miliony wkładał mogła by coś taka optymalizacja przynieść.
-------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
no tak w sumie masz rację, teraz nie będą to miliony rekordów ale nie wykluczam że w niedalekiej przyszłości może być 20, 50 lub więcej razy 20 rekordów co 20 minut, nie są to jedyne rekordy jakie będą się dodawały w tym skrypcie, dlatego zawczasu chcę myśleć o optymalizacji zapytań, i np. co się da wrzucić jednym zapytaniem...
-------------------- Artur
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj https://dev.mysql.com/doc/refman/5.0/en/insert-speed.html
Masz kilka możliwości przyśpeiszenia choćby INSERT DELAYED. Pamiętaj o wyłączeniu autocommit czy jak to się zwało w mysql. I odpowiedź Turson pokazała jak zrobić w jednym wywyołaniu. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 15:32 |