在MariaDB中使用LOAD DATA INFILE时出现问题[重复]

qxsslcnc  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(49)

此问题在此处已有答案

When to use single quotes, double quotes, and backticks in MySQL(13个回答)
12天前关门了。
如果我使用标准查询,如“LOAD DATA INFILE './uploads/import.csv' INTO TABLE table 1 FIELDS EXTRAATED BY ';' LINES EXTRAATED BY '\n'”
文件导入成功。但是,如果我在PHP中将表名作为变量传递,MariaDB会抱怨我的代码中有错误。MariaDB对象为以下代码:

$table = 'table1';
$updateTable = "LOAD DATA LOCAL INFILE './uploads/import.csv' INTO TABLE '$table' FIELDS TERMINATED BY ';'  LINES TERMINATED BY '\n'";
if (mysqli_query ($dbc, $updateTable))
{
$message1 = 'The ' . $table . '  was updated successfully.';
}

字符串
我使用Eclipse来调试我在最新版本的PHP 8.2.4中提到的代码:
我得到了这个错误:致命错误:未捕获的mysqli_sql_exception:您的SQL语法中有一个错误;请检查与您的MariaDB服务器版本对应的手册,以获得在“table 1”附近使用的正确语法。
但是,调试器将$updateTable字符串扩展为:
“LOAD DATA REPORT INFILE './uploads/import.csv' INTO TABLE table 1 FIELDS REPORT BY ';' LINES REPORT BY '\n'”,这是同一个字符串,当不使用PHP中传递的$table变量时,MariaDB会成功查询。所以我显然错过了一些东西,或者今天没有喝足够的咖啡.

0md85ypi

0md85ypi1#

表名是一个标识符,而不是一个字符串文字。你不能把标识符放在单引号里,就好像它们是字符串一样。
错误:

LOAD DATA LOCAL INFILE './uploads/import.csv' INTO TABLE '$table'

字符串
更正:

LOAD DATA LOCAL INFILE './uploads/import.csv' INTO TABLE $table


也是正确的:

LOAD DATA LOCAL INFILE './uploads/import.csv' INTO TABLE `$table`


标识符可以使用反引号(而不是单引号),如果标识符名称与保留关键字冲突,或者它包含空格或大多数标点符号,则需要使用反引号。

相关问题