php如何在mysql的for循环中生成动态数据库连接

kiz8lqtg  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(323)

我是新的工作在php,我的工作是如何改变数据库中的表动态编码在php
像这样的数据库,
数据库名称:数据交换
表名-数据

did   dataname  host  dbuser   dbpwd   dbname
 1     abc      local  root    root     abc_db   // here dataname create new database, when register new dataname
 2     pqr      ubuntu root    passwd   pqr_db

php代码如下:

<?php
        $dsn = "localhost";
        $username = "root";
        $password = "passwd";

        $db = new PDO("mysql:host=$dsn;dbname=data_switch", $username, $password);
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        foreach ($db->query("select * from data") as $row)
        {
           $dataname = $row['dataname'];
           $host = $row['host'];
           $dbuser = $row['dbuser'];
           $dbpwd = $row['dbpwd'];
           $dbname = $row['dbname'];

          $connection_array['data1'][] = array(

              'dataname' => $dataname,
              'host' => $host,
              'dbuser' => $dbuser,
              'dbpwd' => $dbpwd,
              'dbname' => $dbname
           );

        }
        echo "<pre>";
        print_r($connection_array);

       $dbh = new PDO("mysql:host=$host;dbname=$dbname", $dbuser, $dbpwd);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   // here all dataname find but i dont know how to generate dataname's own connection. dynamically

?>

我在循环中得到所有的dataname,但是我不能动态地改变连接,我像一样在表单中注册新的dataname,然后它动态地创建一个新的数据库,但是当我改变表时,我不知道如何通过每个自己的dataname在每个dataname的主机、dbname、dbpwd上动态地连接。
任何人有任何想法请帮忙解决。谢谢

sqxo8psd

sqxo8psd1#

我知道这是一个老帖子,但在一次搜索中发现它可能与我的一个问题有关。
我有一个脚本做什么是非常类似的要求。您需要将连接放置在动态变量中。
如。
我在一个名为$branchdcom的数组中列出了分支及其各自的数据库连接详细信息。我可以打电话到我所有的分支机构,而不必关闭连接和打开所有的时间。
我有一个连接函数,它使用conn\u dcom\u branch函数中发送的值连接到数据库('your\u server'、'your\u db'、'your\u username'、'your\u password')
下面创建到所有数据库的连接。

$connection = array();
foreach ($branchDcom as $key => $value) {
    $branch = $value['Name'];
    if (!is_resource($connections[$branch]['conn'])) {
        ${'connection_'.$branch} = conn_dcom_branch($value['server'], $value['db'], $value['username'], $value['password']);
        ${'connection_'.$branch.'_db'} = $value['db'];
    }
}

这提供了一个包含所有分支连接及其各自的数据库名称的数组。
要使用,只需输入分支名称,它将使用该连接:

$branch = 'select_name';
$query = "
    SELECT 
        your_field
    FROM 
         [".${'connection_'.$branch.'_db'}."].['table_name'] 
";
$rs = ${'connection_'.$branch}->execute($query);

这可能对某人有帮助

相关问题