【问题标题】:mssql_connect will not connect different DB on same SQL Servermssql_connect 不会连接同一 SQL Server 上的不同数据库
【发布时间】:2019-07-09 09:16:05
【问题描述】:
$conn_161 = "192.168.0.161";  //local serwer adress
$user_161 = "ME";
$pass_161 = "what_is_the_password?";
$connect_161 = mssql_connect($conn_161,$user_161,$pass_161);
mssql_select_db ( 'DUKENUKEN3D' , $connect_161 );

//as requested - 1st DB connection and 1st query
$q_duke = "select * from DUKE /*DB1*/";
$r_duke = mssql_query($q_wartownik,$connect_161); //result

$connect_different_db = mssql_connect($conn_161,$user_161,$pass_161);
mssql_select_db ( 'BIGMAN' , $connect_different_db );

//second db and query
$q_bigman = "select * from BIGPEOPLE /*DB2*/";
$r_bigman = mssql_query($q_bigman,$connect_different_db ); //result

错误:

警告:mssql_query() [function.mssql-query]:消息:无效的对象名称“DUKE”。

是的,我知道mssql_select_db 很旧,但我需要在这个项目中使用它。如您所见,我尝试连接到同一台服务器,但同时选择 2 个不同的数据库,并在同一个 php 页面中运行查询(以连接来自 2 个不同数据库的数据)。好像不靠谱?我什至尝试在对第二个数据库进行查询之前运行mssql_select_db,然后将其更改回第一个数据库。

我了解这是库的限制(我将从 LAST 选择的数据库运行所有查询)。

有解决办法吗?因为我得到的只是在不可见的 iframe 中创建页面,并运行具有不同数据库连接的 php 页面 - 远非好的解决方案。

【问题讨论】:

  • 您需要向我们展示您正在执行的查询,因为错误与查询有关,而不是数据库的选择或数据库连接。我基于警告说使用了 mssql_query() 函数。
  • 旁注: 在将变量作为函数参数传递时,没有理由引用它们。而不是:mssql_connect("$conn_161", ...),只需执行mssql_connect($conn_161, ...etc)
  • 这里的错误似乎很清楚。对象TABLE_NAME存在于您连接(查询)工作的数据库中,但它不存在于其他数据库中,因此您的查询失败。
  • 我更新了答案。是的,这就是重点——我在第二个数据库中没有 TABLE_NAME(编辑后的 ​​DUKE)——但我不控制数据库——我只需要从两个数据库中获取数据,而且我不知道 mssql_select_db 现在如何工作。

标签: php sql-server database


【解决方案1】:

我希望这将与您直接在 SQL 环境中运行它时一样工作(例如,您可以在 SSMS 中或从命令行尝试它)。

您可以在查询中引用表时指定数据库名称:例如

select * from db1.dbo.DUKE 

当您想要引用当前数据库上下文之外的对象时,这是标准 SQL Server 行为。

【讨论】:

  • 谢谢。看起来很有希望。我现在不在工作 - 我会试试这个并在可能的时候接受答案。
  • 您先生完全正确!没想到。在我的情况下,这是正确的语法:select * from [DUKENUKEN3D].[dbo].[zmiany] //dbo means database owner 我猜
  • 是的,dbo 表示数据库所有者。它表示表所属的数据库中的模式。很高兴它对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2022-07-26
  • 1970-01-01
相关资源
最近更新 更多