INTO TABLE '$this->table'
テーブル名を引用するために一重引用符を使用しないでください。一重引用符は、文字列リテラル
用です。 または
引用符を使用しないか、バックティックを使用します区切られた識別子の場合
。
INTO TABLE `$this->table`
コメントを再確認してください:
両方から引用符を削除したようです ファイル名とテーブル名。これは私が意図したことではありません。テーブル名から文字列引用符を削除するだけです。ファイル名には必要です。
例:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
http://dev.mysqlに記載されている構文を確認してください。 com / doc / refman / 5.6 / en / load-data.html
INFILE 'file_name'
の前後に引用符があるかどうかに注意してください およびINTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
テーブル名に特殊文字、空白、または予約語が含まれていない限り、実際にはテーブル名の前後にバックティックは必要ありません。
このエラーが発生しました:
そうです、すべてのSQLコマンドがprepare()
と互換性があるわけではありません 。最初に構文エラーを解決していたので、私はあなたのケースについてそれをチェックしませんでした。 prepare()
にできるコマンドのリストを見つけることができます d見出しプリペアドステートメントで許可されるSQL構文 このページ: http:// dev .mysql.com / doc / refman / 5.6 / en / sql-syntax-prepared-statements.html
MySQL 5.6のドキュメントにリンクしましたが、使用しているMySQLのバージョンのドキュメントにアクセスする必要があります。互換性のあるコマンドのリストはリリースごとに変わるためです。
したがって、prepare()
を使用することはできません --exec()
を使用する必要があります またはquery()
代わりにLOAD DATA INFILE
指図。
または、PDOを使用している場合は、属性PDO::ATTR_EMULATE_PREPARES
を設定できます。 true
に 。これにより、PDOはMySQLを偽造するため、prepare()はノーオペレーションであり、クエリは実際にはexecute()中に送信されます。