【问题标题】:Why is my SQL Server query failing?为什么我的 SQL Server 查询失败?
【发布时间】:2011-02-26 20:30:22
【问题描述】:
 connect();
 $arr = mssql_fetch_assoc(mssql_query("SELECT Applications.ProductName,
        Applications.ProductVersion, Applications.ProductSize, 
        Applications.Description, Applications.ProductKey, Applications.ProductKeyID,
        Applications.AutomatedInstaller, Applications.AutomatedInstallerName,
        Applications.ISO, Applications.ISOName, Applications.Internet,
        Applications.InternetURL, Applications.DatePublished, Applications.LicenseID,
        Applications.InstallationGuide, Vendors.VendorName
FROM Applications
INNER JOIN Vendors ON Applications.VendorID = Vendors.VendorID
WHERE ApplicationID = ".$ApplicationID));

$query1 = mssql_query("SELECT Issues.AppID, Issues.KnownIssues
      FROM Issues 
      WHERE Issues.AppID=".$ApplicationID);   
$issues = mssql_fetch_assoc($query1);
$query2 = mssql_query("SELECT ApplicationInfo.AppID,
               ApplicationInfo.Support_Status, ApplicationInfo.UD_Training,
               ApplicationInfo.AtomicTraining, ApplicationInfo.VendorURL
   FROM  ApplicationInfo
   WHERE ApplicationInfo.AppID = ".$ApplicationID);
$row = mssql_fetch_assoc($query2);
function connect(){
 $connect =  mssql_connect(DBSERVER, DBO, DBPW) or 
        die("Unable to connect to server");
 $selected = mssql_select_db(DBNAME, $connect) or 
        die("Unable to connect to database");
 return $connect;
}

上面是代码。第一个查询/fetch_assoc 工作得很好,但是接下来的两个查询失败了,我不知道为什么。这是从 php 显示的错误语句:

警告:mssql_query() [function.mssql-query]:消息:无效的对象名称“问题”。 (严重性 16)在 /srv/www/htdocs/agreement.php 第 47 行

警告:mssql_query() [function.mssql-query]:一般 SQL Server 错误:在第 47 行的 /srv/www/htdocs/agreement.php 中检查来自 SQL Server(严重性 16)的消息 警告:mssql_query() [function.mssql-query]:第 47 行 /srv/www/htdocs/agreement.php 中的查询失败

警告:mssql_fetch_assoc():提供的参数不是第 48 行 /srv/www/htdocs/agreement.php 中的有效 MS SQL 结果资源

警告:mssql_query() [function.mssql-query]:消息:无效的对象名称“software.software_dbo.ApplicationInfo”。 (严重性 16)在 /srv/www/htdocs/agreement.php 第 51 行

警告:mssql_query() [function.mssql-query]:一般 SQL Server 错误:在第 51 行的 /srv/www/htdocs/agreement.php 中检查来自 SQL Server(严重性 16)的消息

警告:mssql_query() [function.mssql-query]:第 51 行 /srv/www/htdocs/agreement.php 中的查询失败

警告:mssql_fetch_assoc():提供的参数不是第 52 行 /srv/www/htdocs/agreement.php 中的有效 MS SQL 结果资源

错误显然围绕查询未执行这一事实。在我的数据库中,我有一个名为 Issues 的表和一个名为 ApplicationInfo 的表,所以我不确定它为什么告诉我它们是无效对象。

【问题讨论】:

  • 这些错误试图告诉您您在查询中引用的某些表/字段无效或不存在。仔细检查 type-o's。
  • ApplicationInfo 不同于 software.software_dbo.ApplicationInfo
  • 查询看起来没问题(对您的数据库结构做出某些假设)。当您直接从 SSMS 查询窗口运行它们时,它们是否有效?如果是这样,那么它不是查询本身。
  • 每个查询都适用于我的 Squirrel SQL 客户端

标签: php sql sql-server sqlconnection


【解决方案1】:

检查您是否正在查询正确的数据库或架构。

software.software_dbo.ApplicationInfo 表示:

  • 一个名为software的数据库
  • 一个名为 software_dbo 的架构 - 可能这就是问题所在。可能是您的 SQL Server 上的dbo
  • 名为ApplicationInfo 的视图/表

也许检查 DBO 的值以及其他参数在此语句中的含义:$connect = mssql_connect(DBSERVER, DBO, DBPW)

【讨论】:

  • 谢谢。将 software_dbo 替换为 dbo 解决了这个问题。问题 th--为什么第一个查询不需要,而其他 2 个呢?
【解决方案2】:

检查您正在连接的用户是否有权使用您尝试查询的表。类似问题的接缝是找不到表格。

处理此问题的最佳方法是授予用户对该数据库中所有对象的权限:

GRANT SELECT, INSERT, DELETE <any other permissions that user needs> ON `database`.`*` TO `user`@`localhost` IDENTIFIED BY 'password'

【讨论】:

  • 我对数据库中的每个对象都拥有完全权限。
  • 请注意,上面的 GRANT 命令适用于 MySQL,原发帖人的问题是 MSSQL 相关的。
猜你喜欢
  • 2011-05-24
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多