mysql - 无法选择某些 mysql 数据并将其存储到 bash 中的变量中

标签 mysql bash

使这项工作有效的所有其他变量都经过测试并且工作正常,所以我显然做错了。

我有一个 bash 脚本,它首先选择一些 mysql 数据并存储到一个新变量中。

然后它继续再次连接并更新数据库。

title=$(mysql -u $user -p$pass -h $host dbname | SELECT post_title FROM wp_posts WHERE ID=$8);

mysql --host=$host --user=$user --password=$pass dbname <<EOF
UPDATE wp_my_music_lib SET title = "$title" WHERE track_id=${4}${6};
EOF

title 条目始终为空,这告诉我初始 SELECT 无法正常工作。还应该注意的是,从选择结果中预期的数据中有空格和特殊字符,即:

Some Artist (10/10/13)

我认为引用 var "$title" 可以解决任何潜在的吞噬问题,但这不是这里的问题,因为我尝试从不同的列中选择单个数字对象,并且也不起作用。

如果我对标题变量进行硬编码,它会按预期工作。

1)你能看出我做错了什么吗?

2)是否可以使用一个数据库连接来执行上述所有操作,因为这更有意义?

最佳答案

mysql | SELECTmysql 的输出通过管道传输到名为 SELECT 的命令,这当然不是您想要的。

要通过 mysql 执行查询并捕获输出,您可以使用以下语法:

title=$(mysql -B dbname <<< "SELECT post_title FROM wp_posts WHERE ID=$8")

您还可以在子查询中执行SELECT以避免多次调用mysql:

mysql --host=$host --user=$user --password=$pass dbname <<EOF
UPDATE wp_my_music_lib SET title = (
 SELECT post_title FROM wp_posts WHERE ID=$8)
WHERE track_id=${4}${6}
EOF

关于mysql - 无法选择某些 mysql 数据并将其存储到 bash 中的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925641/

相关文章:

bash - 语法 `while IFS= read line` 记录在哪里?

linux - 如何选择未注释的行?

php - 将 CSV 格式的 mysql 表导出到 ZIP 文件中

php - 如何使用 ajax 多次调用在 php 中运行第二次调用查询

android - 将 url 中的图像插入到 Sqlite 表中

linux - 将目录中的所有文件复制到linux中的本地子目录

bash - 如何获取通过管道传输到 Bash 中另一个进程的进程的 PID?

regex - 如何从 Bash 中的正则表达式中提取多个环境变量?

mysql - 计算上类时间和下类时间时间戳之间的小时和分钟

mysql - 无法从 Windows 和 Linux (CentOS7) 连接到我的远程 MySQL 服务器