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

Problem using LOAD DATA LOCAL INFILE in MariaDB [duplicate]

提问人:phs 提问时间:11/7/2023 最后编辑:Bill Karwinphs 更新时间:11/7/2023 访问量:66

问:

如果我使用标准查询,例如 “将数据本地文件”./uploads/import.csv“加载到表表1中以”;“结尾的字段以 '\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服务器版本相对应的手册,了解在''table1'附近使用的正确语法。

但是,调试器将$updateTable字符串扩展为:

“将数据本地文件”./uploads/import.csv“加载到表表1中以”;“结尾的字段以“\n'”结尾的行,该字符串与在 PHP 中不使用传递的 $table 变量时导致 MariaDB 成功查询的字符串相同。所以我显然错过了什么,或者今天没有喝足够的咖啡......

php mariadb 加载数据文件

评论

0赞 nbk 11/7/2023
您应该将 SPOME 错误处理添加到您的代码中,看看 Mysqö 是否返回错误
0赞 Adi 11/7/2023
请不要在发布答案后编辑 LOC,请使用 intead,因为现在答案没有意义并投了反对票。Edit:
0赞 user1191247 11/7/2023
如果您觉得需要引用表标识符,请使用反引号而不是单引号 - 应该或不带引号 -TABLE '$table' FIELDSTABLE `$table` FIELDSTABLE $table FIELDS

答:

0赞 Bill Karwin 11/7/2023 #1

表的名称是标识符,而不是字符串文本。不得将标识符放在单引号中,就好像它们是字符串一样。

不對:

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`

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

评论

0赞 phs 11/7/2023
谢谢,这是正确的 - 应该知道,而且没有足够的咖啡来看到这个。谢谢。