【问题标题】:SELECT data from one table in each database on server从服务器上每个数据库中的一个表中选择数据
【发布时间】:2019-03-20 00:24:58
【问题描述】:

我想使用 PHP 获取服务器上特定帐户上所有数据库的列表,因此我使用了以下链接中的 PHP/MySQL:PHP - Get list of databases names

$db_conn = mysqli_connect('localhost', 'username', 'password');
//get a list of databases in the account
$result = mysqli_query($db_conn,"SHOW DATABASES"); 
//display results
while ($row = mysqli_fetch_array($result)) { 
    echo "database name - ".$row[0]."<br>";
}

这部分工作正常。但是我现在想在每个数据库中的一个表中获取一个特定行的值,所有数据库都包含完全相同的表,因此也包含相同的行。

所以在 while { } 里面我尝试了一个 SELECT 语句:

$sql = "SELECT option_value FROM sweb_options WHERE option_name = 'siteurl'";

然后回显 $sql 但这除了输出语句之外没有做任何事情。请问有什么办法吗?

非常感谢。

【问题讨论】:

  • 首先你需要FROM {database}.sweb_options

标签: php mysql select echo


【解决方案1】:

正如我在 cmets 中所说的

首先你需要 FROM {database}.sweb_options

while ($row = mysqli_fetch_array($result)) { 
    $sql = "SELECT option_value FROM `{$row[0]}`.`sweb_options` WHERE option_name = 'siteurl'";
}

否则它将使用您与此 mysqli 实例连接的任何数据库

所以基本上这只是告诉它你想要哪一个。您还可以在 MySQL 中跨多个数据库执行联接和联合,但并非所有数据库都如此。如果您使用的是 PDO 而不是 mysqli,则需要牢记更多信息,但仍然值得一提。

干杯。

【讨论】:

  • 我先发布了评论,但尼克在我之前发布了答案(可能从未看到我的评论)。 ...大声笑...一切都很好。
  • 是的,很抱歉一直很忙,非常感谢您的时间。
【解决方案2】:

这样的事情应该可以工作:

while ($row = mysqli_fetch_array($result)) { 
    $sql = "SELECT option_value FROM {$row[0]}.sweb_options WHERE option_name = 'siteurl'";
    $result2 = mysqli_query($db_conn, $sql);
    // check for success in case table doesn't have option_value column
    if ($result2) {
        $row2 = mysqli_fetch_assoc($result2);
        echo $row2['option_value'];
    }
}

【讨论】:

  • 我收到消息:警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,布尔值在第 12 行的 FILENAME 中给出,即$row2 = mysqli_fetch_assoc($result2);,但随后新值回显得很漂亮:-)
  • @Adrian 出现错误消息是因为您的数据库中有一些表中没有 option_value 列。您需要为此添加支票;查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
相关资源
最近更新 更多