提问人:phs 提问时间:11/7/2023 最后编辑:Bill Karwinphs 更新时间:11/7/2023 访问量:66
在MariaDB中使用LOAD DATA LOCAL INFILE时出现问题[重复]
Problem using LOAD DATA LOCAL INFILE in MariaDB [duplicate]
问:
如果我使用标准查询,例如 “将数据本地文件”./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 成功查询的字符串相同。所以我显然错过了什么,或者今天没有喝足够的咖啡......
答:
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
谢谢,这是正确的 - 应该知道,而且没有足够的咖啡来看到这个。谢谢。
评论
Edit:
TABLE '$table' FIELDS
TABLE `$table` FIELDS
TABLE $table FIELDS