Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Wykonanie zapytania
Hazik
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Hej wszystkim, jestem w miarę świeży w te klocki. Chciałbym scryptem php wczytywać dane z Excela. Stworzyłem kod sql i wygenerowałem do niego kod php. Niestety nie wiem jak wywołać ten scrypt, żeby działał.

  1. LOAD DATA LOCAL INFILE 'c:\\awizo.csv' INTO TABLE awizacjaodbioru
  2. CHARACTER SET cp1250
  3. FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
  4. LINES TERMINATED BY '\r\n'
  5. IGNORE 1 LINES;


  1. $sql = 'LOAD DATA LOCAL INFILE \'c:\\\\awizo.csv\' INTO TABLE awizacjaodbioru\n"
  2.  
  3. . "CHARACTER SET cp1250\n"
  4.  
  5. . "FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'\"\'\n"
  6.  
  7. . "LINES TERMINATED BY \'\\r\\n\' \n"
  8.  
  9. . "IGNORE 1 LINES';
  10.  
  11. echo 'ZAPYTANIE:'.$sql;
  12. mysql_query($sql) or die('BŁĄD:' .mysql_error());


Z góry dziękuję za pomoc.

Ten post edytował Hazik 24.04.2017, 19:00:45
Go to the top of the page
+Quote Post
markuz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Dlaczego chcesz go wczytywać przez SQL? Spróbuj użyć np. file_get_contents.


--------------------
Go to the top of the page
+Quote Post
wolguy
post
Post #3





Grupa: Zarejestrowani
Postów: 219
Pomógł: 10
Dołączył: 9.01.2005

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


albo nawet fgetcsv
Go to the top of the page
+Quote Post
Hazik
post
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Chcę go wczytać przez SQL, bo wiem jak to zrobić. W PHP każdym sposobem, którym próbuję to zrobić w kodzie muszę zadeklarować nazwy kolumn. Zależy mi na tym, żeby plik wczytywało w całości. Może mi ktoś w końcu pomóc?
Go to the top of the page
+Quote Post
wolguy
post
Post #5





Grupa: Zarejestrowani
Postów: 219
Pomógł: 10
Dołączył: 9.01.2005

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


A musisz koniecznie to zapytaniem zrobić? Bo phpmyadmin ma opcję importowania csv. Tylko klik i gotowe.
Go to the top of the page
+Quote Post
Hazik
post
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Wydaje mi się, że po to jest pomoc na forum, żebym mógł się nauczyć. Gdybym chciał wrzucać to przez phpMyAdmin to użyłbym swojego kodu SQL.
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




Bardzo czesto ludzie na forum pytaja o to co im sie wydaje ze jest konieczne. Nasza pomoc wowczas sprowadza sie do pokazania im innej, wlasciwej drogi.
Tak wiec zamiast sie pienic, wystarczylo poprostu napisac ze masz takie widzimisie i chcesz to koniecznie zrobic w php tongue.gif

Cytat
Niestety nie wiem jak wywołać ten scrypt, żeby działał.
Jesli oczekujesz szybkiej pomocy, to opisuj dokladnie swoj problem. "Nie dziala" nic nam nie mowi. Ale jakbys juz np. podal blad zapytania, ktore zwraca ci ten kod, to byloby juz znacznie lepiej


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Hazik
post
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Masz rację, niepotrzebnie się unoszę. Bardzo chciałbym, żeby działało to za pomocą wywołania skryptu PHP. Aktualnie wyświetla mi: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\n" . "CHARACTER SET cp1250\n" . "FIELDS TERMINA' at line 1. Jestem nowy w te klocki i bardzo mnie irytuje moja nieudolność.
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


A po co ci te nowe linie? Widzę też że string zaczynasz ' a kończysz ". Rozszerzenie mysql jest przestarzałe i usunięte. Użyj PDO.


--------------------
Go to the top of the page
+Quote Post
Hazik
post
Post #10





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Czyli rozumiem, że najpierw muszę zmienić łączenie z bazą na PDO

  1. <?php
  2. /*Połączenie z bazą danych*/
  3. $dbhost = 'localhost';
  4. $dblogin = 'login';
  5. $dbpass = 'haslo';
  6. $dbselect = 'nazwa_bazy';
  7. mysql_connect($dbhost,$dblogin,$dbpass);
  8. mysql_select_db($dbselect) or die("Błąd przy wyborze bazy danych");
  9. mysql_query("SET CHARACTER SET UTF8");
  10. ?>
  11.  
  12.  
  13. <?php
  14.  
  15. try
  16. {
  17. $pdo = new PDO('mysql:host=localhost;dbname=nazwa_bazy', 'login', 'haslo');
  18. echo 'Połączenie nawiązane!';
  19. }
  20. catch(PDOException $e)
  21. {
  22. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  23. }
  24. ?>
  25.  


Później przerobić kod:

  1. $sql = 'LOAD DATA LOCAL INFILE \'c:\\\\awizo.csv\' INTO TABLE awizacjaodbioru"
  2.  
  3. . "CHARACTER SET cp1250"
  4.  
  5. . "FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'\""
  6.  
  7. . "LINES TERMINATED BY \'\\r\\n\'"
  8.  
  9. . "IGNORE 1 LINES';
  10.  
  11. echo 'ZAPYTANIE:'.$sql;
  12. $q= $pdo->query($sql) or die('BŁĄD');


Niestety w dalszym ciągu nie wrzuca danych do bazy. Błędów brak. Co robię źle?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Masz strasznie pomieszane ciapki....

  1. $sql = 'LOAD DATA LOCAL INFILE \'c:\\\\awizo.csv\' INTO TABLE awizacjaodbioru
  2. CHARACTER SET cp1250
  3. FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'\"\'
  4. LINES TERMINATED BY \'\\r\\n\'
  5. IGNORE 1 LINES';
Go to the top of the page
+Quote Post
Hazik
post
Post #12





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Pyton_000 - mistrzu jesteś genialny.

Pomoże mi ktoś tylko / naprowadzi mnie co robię źle w przeróbce na PDO? W mysql_query działa. Skoro już mam się czegoś nauczyć to porządnie.
Go to the top of the page
+Quote Post
viking
post
Post #13





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


http://php.net/manual/en/pdo.error-handling.php
Zapytanie dajesz w blok try. Dodatkowo error_reporting(-1) i zobacz przyklejony temat.


--------------------
Go to the top of the page
+Quote Post
Hazik
post
Post #14





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Urodziłem coś takiego:

  1. <?php
  2.  
  3.  
  4. try
  5. {
  6. $pdo = new PDO('mysql:host=localhost;dbname=nazwa_bazy', 'login', 'haslo');
  7. echo 'Połączenie nawiązane!';
  8.  
  9. $sql = 'LOAD DATA LOCAL INFILE \'c:\\\\awizo.csv\' INTO TABLE awizacjaodbioru
  10. CHARACTER SET cp1250
  11. FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'\"\'
  12. LINES TERMINATED BY \'\\r\\n\'
  13. IGNORE 1 LINES';
  14.  
  15. $q= $pdo->query($sql) or die('BŁĄD');
  16.  
  17.  
  18.  
  19. }
  20. catch(PDOException $e)
  21. {
  22. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  23. }
  24. ?>
  25.  



Wyświetla mi teraz następujący warning:
Połączenie nawiązane!
Warning: PDO::query(): LOAD DATA LOCAL INFILE forbidden in C:\xampp\htdocs\excel2.php on line 16
BŁĄD

Niestety w dalszym ciągu nie uzupełnia bazy;(

Ten post edytował Hazik 4.05.2017, 11:49:50
Go to the top of the page
+Quote Post
viking
post
Post #15





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Pierwszy link z google po wpisaniu tej frazy wszystko wyjaśnia http://stackoverflow.com/questions/7638090...orbidden-in-php


--------------------
Go to the top of the page
+Quote Post
Hazik
post
Post #16





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.04.2017

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


Dziękuję wszystkim za pomoc. Gdyby ktoś potrzebował wrzucam działający kod. Pozdrawiam:)

  1. <?php
  2.  
  3.  
  4. try
  5. {
  6. $pdo = new PDO('mysql:host=localhost;dbname=nazwa_bazy', 'login', 'haslo', [PDO::MYSQL_ATTR_LOCAL_INFILE => true]);
  7.  
  8. echo 'Połączenie nawiązane!';
  9.  
  10. $sql = 'LOAD DATA LOCAL INFILE \'c:\\\\plik.csv\' INTO TABLE nazwa_tabeli
  11. CHARACTER SET cp1250
  12. FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'\"\'
  13. LINES TERMINATED BY \'\\r\\n\'
  14. IGNORE 1 LINES';
  15.  
  16. $q= $pdo->query($sql) or die('BŁĄD');
  17.  
  18.  
  19. }
  20. catch(PDOException $e)
  21. {
  22. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  23. }
  24. ?>


Temat do zamknięcia
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 09:04