sql >> データベース >  >> RDS >> Mysql

PHP:LOADDATAINFILE構文エラー

    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()中に送信されます。



    1. 現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。 SQL Azureエラーはどういう意味ですか?

    2. WordPressリンクはすべてダブルURLにリダイレクトされます

    3. MySQLのSUM(NULL)を理解する

    4. 複数の選択されたチェックボックスからデータベースに値を挿入する