Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP:kesalahan sintaks LOAD DATA INFILE

INTO TABLE '$this->table'

Jangan gunakan tanda kutip tunggal untuk mengutip nama tabel. Kutipan tunggal adalah untuk literal string atau literal tanggal .
Tidak menggunakan tanda kutip, atau back-ticks untuk pengenal yang dibatasi .

INTO TABLE `$this->table`

Kembali komentar Anda:

Anda tampaknya menghapus kutipan dari keduanya nama file dan nama tabel. Bukan ini yang saya maksud. Hapus saja tanda kutip string dari nama tabel. Anda memang membutuhkannya untuk nama file.

Contoh:

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

Tinjau sintaks yang didokumentasikan di http://dev.mysql. com/doc/refman/5.6/en/load-data.html

Perhatikan ada atau tidaknya tanda kutip di sekitar INFILE 'file_name' dan INTO TABLE tbl_name :

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

Anda sebenarnya tidak memerlukan tanda centang kembali di sekitar nama tabel, kecuali jika nama tabel Anda berisi karakter khusus, spasi, atau kata khusus.

Anda mendapatkan kesalahan ini:

Benar, tidak semua perintah SQL kompatibel dengan prepare() . Saya tidak memeriksanya untuk kasus Anda, karena kami menyelesaikan kesalahan sintaks terlebih dahulu. Anda dapat menemukan daftar perintah yang dapat prepare() d di bawah judul Sintaks SQL Diizinkan dalam Pernyataan yang Disiapkan di halaman ini:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

Saya menautkan ke dokumen MySQL 5.6, tetapi Anda harus mengunjungi dokumen untuk versi MySQL yang Anda gunakan. Karena daftar perintah yang kompatibel berubah dari rilis ke rilis.

Jadi Anda tidak dapat menggunakan prepare() -- Anda harus menggunakan exec() atau query() sebagai gantinya untuk LOAD DATA INFILE memerintah.

Atau, jika Anda menggunakan PDO, Anda dapat menyetel atribut PDO::ATTR_EMULATE_PREPARES untuk true . Itu akan membuat PDO memalsukan MySQL, jadi prepare() adalah no-op dan kueri sebenarnya dikirim selama eksekusi().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengganti PEAR:MDB2 di PHP 5.3

  2. Tanggal PHP ('W') vs MySQL YEARWEEK (sekarang ())

  3. kelompokkan dengan nama kolom klausa tanpa memilihnya di daftar pilih

  4. Contoh Injeksi PHP/MySQL

  5. Aman dari Injeksi SQL - PDO, mysqli