此问题在此处已有答案:
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会成功查询。所以我显然错过了一些东西,或者今天没有喝足够的咖啡.
1条答案
按热度按时间0md85ypi1#
表名是一个标识符,而不是一个字符串文字。你不能把标识符放在单引号里,就好像它们是字符串一样。
错误:
字符串
更正:
型
也是正确的:
型
标识符可以使用反引号(而不是单引号),如果标识符名称与保留关键字冲突,或者它包含空格或大多数标点符号,则需要使用反引号。