ERROR 1064(42000)MariaDB服务器版本,用于在'附近使用正确的语法。 SET = hello world WHERE。在第1行= 3'

时间:2017-10-12 07:49:37

标签: mysql wordpress

我尝试使用以下命令编辑wordpress mysql数据库:

root@vps:~# echo "UPDATE `wp_options` SET  `option_value` =  'hello world' WHERE `option_id` =3" | mysql -u root -D dbname;
-bash: wp_options: command not found
-bash: option_value: command not found
-bash: option_id: command not found
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SET   =  'hello world' WHERE  =3' at line 1

mysql --version

root@vps:~# mysql --version
mysql  Ver 15.1 Distrib 10.1.28-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

尝试一些试验和错误后,我得到答案

root@vps:~# echo "UPDATE wp_options SET option_value =  'hello world' WHERE option_id =3" | mysql -u root -D dbname;

答案 1 :(得分:1)

问题出现在第一个shell命令中,您可以从bash报告的错误中看到:

echo "UPDATE `wp_options` SET  `option_value` =  'hello world' WHERE `option_id` =3"

在运行命令之前,shell(bash)在命令行上执行多次替换。其中一个是command substitution(上面命令中唯一的替换类型)。此替换标识由反引号(`)包围的子串,将它们作为单独的命令运行,并用它们的输出替换它们。

在您的情况下,bash发现wp_optionsoption_valueoption_id`包围,尝试将其作为命令运行并失败,因为它们不是Linux命令。然后用运行这些命令生成的输出替换它们(没有输出,因为它们没有运行),命令变为:

echo "UPDATE  SET   =  'hello world' WHERE  =3" | mysql

当然,这不是有效的查询,mysql也会抱怨。

此问题的简单解决方案是将查询包装成单引号('); bash对单引号中包含的参数不执行command substitution。在这种情况下,您需要在查询内的字符串值周围使用双引号。

命令应为:

echo 'UPDATE `wp_options` SET `option_value` = "hello world" WHERE `option_id` = 3' | mysql -u root -D dbname

另一个选择是不将表和字段名称包装在查询中的反引号中。它们不是MySQL关键字,它们不包含特殊字符,不需要将它们放在反引号中。在这种情况下,您可以使用双引号进行查询,因为它现在不包含任何特殊内容:

echo "UPDATE wp_options SET option_value = 'hello world' WHERE option_id = 3" | mysql -u root -D dbname

答案 2 :(得分:-1)

UPDATE希望您命名一个表,而不是表的一个字段,因此它将是dbname.wp_options而不是dbname.wp_options.option_id

echo UPDATE `dbname`.`wp_options` SET  `option_value` =  'hello world' WHERE `wp_options`.`option_id` =3 | mysql -u root

我个人更喜欢使用UPDATE wp_options并告诉mysql客户端使用mysql -D dbname连接哪个数据库。