PHP 执行 | mysql 命令 returns sh: -c: 第 0 行:意外标记“换行符”附近的语法错误

PHP exec | mysql command returns sh: -c: line 0: syntax error near unexpected token `newline'

我想多次插入数据库,但是 mysql 命令 returns 我: sh: -c: 第 0 行:意外标记“换行”附近的语法错误

有人知道这个错误是什么意思吗?

这是我的命令:

mysql -h 127.0.0.1 -D db_name -u username --password=pass --debug-info true <shared/local_sql/3.sql>

SQL 文件示例:

DELETE FROM table_name WHERE num = '999999';
START TRANSACTION;
INSERT INTO table_name SET key1 = 'val1', key1 = 'val1', key1 = 'val1', key1 = 'val1', key1 = 'val1', key1 = 'val1', key1 = 'val1', key1 = '', key1 = '', key1 = 'val1', num = '999999';
INSERT INTO table_name SET key1 = 'val2', key1 = 'val2', key1 = 'val2', key1 = 'val2', key1 = 'val2', key1 = 'val2', key1 = 'val2', key1 = '', key1 = '', key1 = 'val2', num = '999999';
COMMIT;
UPDATE table_name SET num = '999998' WHERE num = '2';
UPDATE table_name SET num = '2' WHERE num = '999999';
DELETE FROM table_name WHERE num = '999998' OR num = '999999';

>output redirection operator,您没有设置任何输出文件。更短的测试用例:

$ >
sh: syntax error: unexpected newline

如果您真的想将输出发送到文件,您需要添加文件名,但我的印象是您将 <> 视为一种引号,但事实并非如此。去掉 >:

mysql -h 127.0.0.1 -D db_name -u username --password=pass --debug-info true < shared/local_sql/3.sql

使用

mysql -h 127.0.0.1 -D db_name -u username --password=pass --debug-info true shared/local_sql/3.sql

您可能从某些示例中复制了字符 <>,这些字符用于指示文件名的占位符,例如 mysql ... <sql_file>.

整个占位符 <sql_file> 必须替换为实际文件名,在您的示例中为 shared/local_sql/3.sql

字符 <> 被 shell 解释为标准输入或标准输出的重定向。

<shared/local_sql/3.sql 指示 shell 从指定文件重定向 mysql 命令的标准输入。这可能真的有效。

> 后面需要一个文件名来指定输出应该重定向到的位置。由于没有文件名,只有行尾,您会收到错误消息。