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
命令的标准输入。这可能真的有效。
>
后面需要一个文件名来指定输出应该重定向到的位置。由于没有文件名,只有行尾,您会收到错误消息。
我想多次插入数据库,但是 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
命令的标准输入。这可能真的有效。
>
后面需要一个文件名来指定输出应该重定向到的位置。由于没有文件名,只有行尾,您会收到错误消息。