【问题标题】:Error 42S02 from the Microsoft Drivers for PHP for SQL Server来自 Microsoft Drivers for PHP for SQL Server 的错误 42S02
【发布时间】: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


【解决方案1】:

尝试用“而不是方括号来引用表名,如果你使用单引号来分隔字符串,那么你将不必将它们斜线或斜线 $

【讨论】:

    最近更新 更多