【问题标题】:Connect to Multiple Databases using MySQLi使用 MySQLi 连接到多个数据库
【发布时间】:2015-08-05 01:54:26
【问题描述】:

我需要使用 PHP 连接到两个数据库,并使用第一个查询的结果从第二个数据库中获取我需要的其余数据。

所以对于第二个连接,我需要连接到第二个数据库并选择状态和邮政编码,其中连接 1(客户端)的结果等于数据库 2 中的名字。我该怎么做?

<?php
// check if the 'id' variable is set in URL, and check that it is valid
if (isset($_GET['cd']) && is_numeric($_GET['cd'])) {

    // get id value
    $id = intval($_GET['cd']);
}

$results = $id;
//Open a new connection to the MySQL server
require "calendarconnect.php";

//chained PHP functions
$client = $mysqli->query("SELECT client FROM appointments WHERE ID = $results")->fetch_object()->client;
print  $client; //output value

$mysqli->close();

连接到数据库代码类似于下面

<?php
//Open a new connection to the MySQL server
$mysqli = new mysqli('localhost','some database','some password','some username');

//Output any connection error
if ($mysqli->connect_error) {
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}

【问题讨论】:

  • 你需要创建 2 个不同的连接,所以如果你向我们展示你的 PHP 用于数据库连接,我们可以提供帮助
  • @RiggsFolly 使用连接代码发布更新。它基本上是使用的普通 MySQLi 代码。

标签: php mysqli


【解决方案1】:

这没有经过测试,但我认为它会是这样的。

<?php

$dbc1 = new MySQLi()or die('error connecting to database');
$dbc2 = new MySQLi()or die('error connecting to database');



//build query 1
$query1 = "SELECT * FROM Table";

$result1 = $dbc1->query($query) or die("Error in query");
$thing1 = '';
// check result
if($result1->num_rows){
    //fetch result as object
    $row = $result1->fetch_object();

    //set attributes
    $thing1 = $row->Name;
}   


//build query 2
$query2 = "SELECT * FROM AnotherTable WHERE Id = '$thing1'";

$result2 = $dbc2->query($query) or die("Error in query");
$thing2 = '';
// check result
if($result2->num_rows){
    //fetch result as object
    $row = $result2->fetch_object();

    //set attributes
    $thing2 = $row->Name;
}

?>

【讨论】:

    【解决方案2】:

    您需要建立 2 个不同的连接

    <?php
        $mysqliDB1 = new mysqli('localhost', 'DB1UserId', 'pwd', 'db1');
    
        $mysqliDB2 = new mysqli('localhost', 'DB2UserId', 'pwd', 'db2');
    

    现在,当您使用 $mysqliDB1-&gt;.... 时,您正在与 DB1 数据库通信,而当您使用 $mysqliDB2-&gt;.... 时,您正在与 DB2 数据库通信

    所以

    $client = $mysqliDB1->query("SELECT client FROM appointments WHERE ID = $results")
             ->fetch_object();
    
    $locn = $mysqliDB2->query("SELECT state,zipcode 
                               FROM location 
                               WHERE ClientID = {$client->FirstName}")
                      ->fetch_object();
    echo $locn->state;
    echo $locn->zipcode;
    

    我猜的是表名等等,但我不是明眼人,所以你必须自己填写。

    【讨论】:

    • 代码的第一部分工作正常,但第二部分我似乎遇到了 Where 语句的问题并收到错误致命错误:调用非成员函数 fetch_object()目的。问题是在数据库 1 中,两个值在一个名为 client 的列中,并且可能包含一个空格,而在第二个数据库中,有两个单独的列 firstname、lastname。我试过这个WHERE CONCAT(firstname, ' ', lastname) = {$client-&gt;firstname} 但我仍然得到同样的错误
    【解决方案3】:

    如果你想同时在两个数据库中执行查询,你需要有两个独立的 mysqli 对象。要打开连接,您可以使用以下代码:

    // Don't forget to enable error reporting!
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
    $db1 = new mysqli('localhost', 'user', 'pass', 'dbName');
    $db1->set_charset('utf8mb4'); // always set the charset
    
    $db2 = new mysqli('localhost', 'user', 'pass', 'dbName2');
    $db2->set_charset('utf8mb4'); // always set the charset
    

    然后你可以在每个数据库中分别执行你的两个语句。

    // get id value
    $id = intval($_GET['cd']);
    
    // Get client name from DB1
    $stmt = $db1->prepare('SELECT client FROM appointments WHERE ID = ?');
    $stmt->bind_param('s', $id);
    $stmt->execute();
    $client = $stmt->get_result()->fetch_object();
    
    // Get state and zipcode from DB2
    $stmt = $db2->prepare('SELECT state,zipcode FROM location WHERE ClientName  = ?');
    $stmt->bind_param('s', $client->client);
    $stmt->execute();
    $location = $stmt->get_result()->fetch_object();
    
    echo $location->state;
    echo $location->zipcode;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2014-07-04
      • 2019-08-13
      • 1970-01-01
      相关资源
      最近更新 更多