Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP:błędy składni LOAD DATA INFILE

INTO TABLE '$this->table'

Nie używaj pojedynczych cudzysłowów do cytowania nazwy tabeli. Pojedyncze cudzysłowy dotyczą literałów tekstowych lub literały daty .
Albo nie używaj cudzysłowów, albo wsteczne zaznaczenia dla rozdzielanych identyfikatorów .

INTO TABLE `$this->table`

Odpowiedz na swój komentarz:

Najwyraźniej usunąłeś cytaty z obu nazwę pliku i nazwę tabeli. Nie o to mi chodziło. Po prostu usuń znaki cudzysłowu z nazwy tabeli. Potrzebujesz ich do nazwy pliku.

Przykład:

$sql = "LOAD DATA LOCAL INFILE '$this->file'
    INTO TABLE `$this->table`
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\\n'
    OPTIONALLY ENCLOSED BY '\"'
    ($columns)";

Zapoznaj się ze składnią udokumentowaną pod adresem http://dev.mysql. com/doc/refman/5.6/en/load-data.html

Zwróć uwagę na obecność lub brak cudzysłowów wokół INFILE 'file_name' i INTO TABLE tbl_name :

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name

W rzeczywistości nie potrzebujesz zaznaczeń wokół nazwy tabeli, chyba że nazwa tabeli zawiera znaki specjalne, odstępy lub słowa zastrzeżone.

Otrzymałeś ten błąd:

Tak, nie wszystkie polecenia SQL są kompatybilne z prepare() . Nie sprawdziłem tego w twoim przypadku, ponieważ najpierw naprawiliśmy błąd składni. Możesz znaleźć listę poleceń, które mogą być prepare() d pod nagłówkiem Składnia SQL dozwolona w przygotowanych oświadczeniach na tej stronie:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

Połączyłem się z dokumentacją MySQL 5.6, ale powinieneś odwiedzić dokumentację dotyczącą używanej wersji MySQL. Ponieważ lista kompatybilnych poleceń zmienia się z wydania na wydanie.

Więc nie możesz użyć prepare() -- będziesz musiał użyć exec() lub query() zamiast tego LOAD DATA INFILE Komenda.

Alternatywnie, jeśli używasz PDO, możesz ustawić atrybut PDO::ATTR_EMULATE_PREPARES na true . To sprawi, że PDO sfałszuje MySQL, więc przygotowanie() nie działa, a zapytanie jest faktycznie wysyłane podczas execute().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL wybierz 1 wiersz z połączenia wewnętrznego

  2. Konfiguracja MySQL / CodeIgniter na OpenShift

  3. Jak ustawić jeden FK (klucz obcy) na kilku stołach?

  4. Pobieranie danych z bazy danych JDBC do Jtable

  5. MySQL/PHP Wybieranie tylko unikalnych wartości z wielu kolumn i umieszczanie ich w osobnych tablicach