【发布时间】:2025-12-17 16:45:01
【问题描述】:
我正在尝试使用 Microsoft Drivers for PHP for SQL Server 通过 PHP 从 SQL Sever 数据库中提取一些数据。有些表我可以正常检索,但其他表给出以下错误消息:
Array ( [0] => Array ( [0] => 42S02 [SQLSTATE] => 42S02 [1] => 208 [code] => 208 [2] => [Microsoft][SQL Server Native Client 10.0 ][SQL Server]无效的对象名称'xyz$Permanent Assignments'。[消息] => [Microsoft][SQL Server Native Client 10.0][SQL Server]无效的对象名称'xyz$Permanent Assignments'。))
如果我尝试使用相同的凭据从 isql (SELECT * FROM [xyz$Permanent Assignments]) 运行相同的语句,它可以正常工作,因此我知道该语句是正确的并且对象确实存在。
我也尝试过使用版本 1 和 2 的 MS 驱动程序。
代码如下,但如果我尝试其他表格,它就可以工作 - 有点碰巧。
$tsql = "选择 * FROM [".$client."\$Permanent Assignments]"; 打印 $tsql; $stmt = sqlsrv_query($conn, $tsql); 如果 ( $stmt ) { echo "语句执行。"; } 别的 { echo "语句执行出错。\n"; 死(print_r(sqlsrv_errors(),真)); }
有人有什么想法吗?
谢谢
【问题讨论】:
-
失败的表都有
$,对吗? -
您好,不,所有表格中都有 $。格式是 [company name$table name],所以 [xyz$table a] 可以工作,而 [xyz$table b] 不行。看不到图案。这些表格都来自 Navision。
-
@william 是否有可能展示一些有效和无效的示例?
-
我不是 SQL Server 专家,但您是否 100% 确定这不是权限问题?当前用户有权访问这些表?
-
确保这些工作:$tsql = "SELECT * FROM [".$client."\$Base Calendar]"; $tsql = "SELECT * FROM [".$client."\$Customer]";这些不 $tsql = "SELECT * FROM [".$client."\$TS Assignment]"; $tsql = "SELECT * FROM [".$client."\$Permanent Assignments]";不,我不确定这不是许可!现在再看一遍,失败的都是来自 Navision 的附加组件。所以这似乎是可能的cuplrit。不明白为什么相同的用户名和密码可以在 isql 中选择,但不能从脚本中选择。脚本是否使用不同的凭据运行?
标签: php sql sql-server driver