在 MariaDB 中使用 LOAD DATA LOCAL INFILE 时出现问题

问题描述 投票:0回答:1

如果我使用标准查询,例如 “将数据本地 INFILE './uploads/import.csv' 加载到表 table1 字段中,以 ';' 结尾以 ' 结尾的行 ''

文件导入成功。但是,如果我将表名作为 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 字符串扩展为:

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

php mariadb load-data-infile
1个回答
-2
投票

所以你的 SQL 字符串中有不正确的连接,我相信它应该是

$updateTable = "LOAD DATA LOCAL INFILE './uploads/import.csv' INTO TABLE $table FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";

在 PHP 中使用句点 (.) 连接字符串,但变量周围不要使用点。

编辑: 确保变量

$dbc
包含有效的数据库连接,并且文件路径“./uploads/import.csv”正确。给出答案后,请不要编辑代码片段。

© www.soinside.com 2019 - 2024. All rights reserved.