使用Prepared语句一次查询两个数据库

时间:2018-11-20 11:00:17

标签: php mysql sql prepared-statement

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

在用户数据库上,有一个名为用户

的表
-----------------
UserID | UserName
-----------------

在“图书”数据库上,有一个名为图书

的表
 ------------------------------
 BookID | BookName | BookUserID
 ------------------------------

我想做的是编写一个查询,该查询将:

用户表上选择具有 UserID = $ InputID 的用户,并在 Books 表中选择图书,其中 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;

}

1 个答案:

答案 0 :(得分:1)

如果两个DB(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;

如果两个DB(UserDB,BooksDB)都位于不同的服务器上。 首先,您需要为其他服务器创建链接,然后使用链接名称触发以下类似查询,让您的链接名称为LinkServer2,然后从server1.UserDB触发查询。确保对链接服务器使用完全限定的名称。

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 *),则可以做到。