使用准备好的语句一次查询两个数据库

Query Two Databases at once using Prepared statements

我有一个名为 getData($Books, $Users, $InputID); 的函数,它接收两个数据库连接和用户 ID。

在用户数据库中,我有一个名为 Users table

-----------------
UserID | UserName
-----------------

在图书数据库中,我有一个名为 Books

的 table
 ------------------------------
 BookID | BookName | BookUserID
 ------------------------------

我想做的是编写 ONE 查询,它将:

Select Users table 上的用户 UserID = $InputID,还有 select Books Table 上的书,其中 BookUserID = $InputID;

这必须使用准备好的语句来完成.. 这是我试过的。

function getData($Books, $Users, $InputID){

$fetch_results = prepare('SELECT * from UsersDB.Users U LEFT JOIN BooksDB.Books B ON B.BookUserID = U.UserID   Where UserID = :InputID');

$fetch_results->execute(array(':userID' => $InputID));
return $Data;

}

如果您的两个数据库(UserDb、BooksDB)都在同一台服务器上,那么查询就像这样。

SELECT u.UserName, b.BookName
FROM UserDB.dbo.Users u
     INNER JOIN BooksDB.dbo.Books b 
     ON b.UserId = b.BookUserId
WHERE u.UserId = $InputID
      OR BookUserID = $InputID;

如果您的两个数据库(UserDB、BooksDB)在不同的服务器上。 首先,您需要为其他服务器创建 link,然后使用 link 名称触发以下类似查询,让您的 link 名称为 LinkServer2,然后您从 server1.UserDB 触发查询。确保使用 linked 服务器的完全限定名称。

SELECT u.UserName, b.BookName
FROM UserDB.dbo.Users u
     INNER JOIN LinkServer2.BooksDB.dbo.Books b 
     ON b.UserId = b.BookUserId
WHERE u.UserId = $InputID
      OR BookUserID = $InputID;

如果您想使用 LEFT JOIN 并检索所有列数 (SELECT *),那么您可以毫无问题地做到这一点。