Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wykonanie zapytania
Forum PHP.pl > Forum > Przedszkole
Hazik
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.
markuz
Dlaczego chcesz go wczytywać przez SQL? Spróbuj użyć np. file_get_contents.
wolguy
albo nawet fgetcsv
Hazik
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?
wolguy
A musisz koniecznie to zapytaniem zrobić? Bo phpmyadmin ma opcję importowania csv. Tylko klik i gotowe.
Hazik
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.
nospor
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
Hazik
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ść.
viking
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.
Hazik
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?
Pyton_000
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';
Hazik
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.
viking
http://php.net/manual/en/pdo.error-handling.php
Zapytanie dajesz w blok try. Dodatkowo error_reporting(-1) i zobacz przyklejony temat.
Hazik
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;(
viking
Pierwszy link z google po wpisaniu tej frazy wszystko wyjaśnia http://stackoverflow.com/questions/7638090...orbidden-in-php
Hazik
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
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.