使用MySQLi连接到多个数据库

4

我需要使用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);
}

您需要创建两个不同的连接,也许如果您向我们展示数据库连接的PHP代码,我们可以帮助您。 - RiggsFolly
@RiggsFolly发布了一个连接代码更新。基本上是正常使用的MySQLi代码。 - Marquise R
3个回答

3

这没有经过测试,但我认为应该像这样。

<?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

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

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

    $mysqliDB2 = new mysqli('localhost', 'DB2UserId', 'pwd', 'db2');

现在,当您使用$mysqliDB1->....时,您正在与DB1数据库交互;当您使用$mysqliDB2->....时,您正在与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->firstname},但仍然出现相同的错误。 - Marquise R

0
如果您想同时在两个数据库中进行查询,您需要有两个单独的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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接