php - SELECT FROM 以 JOIN 中的值命名的数据库

标签 php mysql database

我有一个 SQL 语句必须从两个数据库中提取信息,一个是常量已知数据库,另一个是在第一个数据库中动态找到的。数据库结构如下所示:

  • (数据库)查找
    • (表格)测试
      • (字段)键,数据库名称
      • (行示例)“foo”、“database_foo”
  • (数据库)database_foo
    • (表格)栏
      • (字段)important1,important2
      • (行样本)“傻”、“测试”

所以我的 SQL 语句是这样的:

SELECT
  test.key as key,
  test.database_name as database_name,
  bar.important1 as important1,
  bar.importnat2 as important2,
FROM
  lookup.test as test,
  (database_name).bar as bar,  # this, obviously, doesn't work
WHERE
  key = 'foo'
LIMIT 1;

有没有办法让我完成这项工作,还是我只执行两个单独的 SQL 语句更好,一个用于查找,一个用于数据库?

最佳答案

如果您必须这样做,那么您需要使用动态 sql 两个语句。

您将查询构建为字符串,然后在构建查询后对查询运行 EXEC

在这种情况下,您将有一个数据库名称的字符串变量,然后您将从该变量和您的文字查询创建一个查询,然后您只需执行它。

但是请注意,如果您不控制输入参数,这会使您容易受到 SQL 注入(inject)攻击。

Erland Sommarskog 有一本关于使用动态 SQL 的入门读物:

http://www.sommarskog.se/dynamic_sql.html

编辑:根据下面@BryanMoyle 的评论,您可能需要执行单独的查询 动态sql。您需要提取该值以确定其他数据库名称...因为您不能将数据库名称用作变量,否则您需要先SELECT此信息,然后将其粘贴到后续查询。

关于php - SELECT FROM 以 JOIN 中的值命名的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613900/

相关文章:

php - 双三元的意外结果

mysql - Cakephp:如果每个模型通过某个外键连接到其他模型,如何链接模型

java - 数据库基本单元测试策略 : truncating tables between unit tests & test data

php - 带有替代结果的数据库标记

php - 如何使用 CodeIgniter 的 ActiveRecord 选择列值不为 NULL 的行?

php - Woocommerce 添加到购物车未显示在可变产品上

php - 在 Woocommerce 中的产品自定义循环上启用 Ajax 添加到购物车按钮

mysql - 如果满足两列的条件(无论顺序如何),则插入或更新

mysql - Nodejs breeze-sequelize with MySQL - .select() 不工作

c# - 改进 Linq 查询