ISAM Table 未找到,SQL 在 SQLExecDirect 中状态 S0000

ISAM Table Not Found, SQL state S0000 in SQLExecDirect

正在尝试连接 ToppSpeed 数据库并从中获取信息。

使用 Topspeed ODBC 驱动程序正确创建 DSN。

我创建了一个示例脚本来验证它是否正常工作。

odbctest.php

       $conn=odbc_connect("DSN_NAME",'',''); //Make a coonection to DSN

        if (!$conn){
            exit("Connection Failed: " . $conn);
        }

        $sql="SELECT * FROM ExampleTableName"; // Query String

        $rs=odbc_exec($conn,$sql);            //Execute Query <--- Error Line

        if (!$rs) {
            exit("Error in SQL");
        }

        while (odbc_fetch_row($rs)){
            var_dump(odbc_result($rs,1));
        }

        odbc_close($conn);

错误:

PHP Warning: odbc_exec(): SQL error: [SoftVelocity Inc.][TopSpeed ODBC Driver][ISAM]ISAM Table Not Found, SQL state S0000 in SQLExecDirect in C:\inetpub\wwwroot\projectFolder\odbctest.php on line 9

相同的脚本,唯一的区别是它是 运行ning 在命令行上而不是在 IIS 服务器上,它是 运行ning 在 PHP 内置服务器上而不是在 IIS 上工作。

其他技术差异是

我已经放了一个 PHP 文件来查看两台服务器上的 PHP 信息。 这是我发现的唯一区别。

DSN 字符串中没有问题,因为当我将 DSN 字符串更改为未知时,它发现 DSN 字符串中存在错误。

我认为尝试从 IIS 服务器(PHP 运行s on CGI/FastCGI)访问数据时可能存在一些权限问题。

我想知道是否存在权限问题,为什么错误显示 table 未找到!!

我找不到任何关于 TopSpeed 数据库连接错误的好文档,因为这个数据库没有被广泛使用。

有什么建议或想法吗?请指教。提前谢谢你。

数据库 SQL 错误没有说明任何关于权限的信息,

所以我创建了一个简单的另一个 PHP 脚本来将数据附加到 TEXT 文件。

我运行那个PHP脚本在IIS服务器上有两个测试用例

  • 测试用例1:写入驻留在项目目录(同一服务器)中的文本文件 PHP 脚本正确执行并将数据写入文本文件。

  • 测试案例2:我用文件D:\some_directory\logfile.txt更改文本文件路径(驻留在D盘) 当我再次 运行 它再次编写脚本时,我收到以下错误:

Warning: file_put_contents(D:\some_directory\logfile.txt): failed to open stream: Permission denied in C:\inetpub\wwwroot\project-directory\write.php on line 12

确认权限有问题

应用程序池分配给IIS管理器中的网站已经有D: Driver.的权限所以这不是问题. 在更多研究中,我发现

我们需要先确定USER,我们需要提供权限,用户就是"Anonymous user identity"

的值

https://www.iis.net/configreference/system.webserver/security/authentication/anonymousauthentication?showTreeNavigation=true

我看到匿名用户身份的值不是应用程序池!!

我将其更改为应用程序池标识。

现在 website/application 的 匿名用户身份 成为 应用程序池 并且具有正确的权限。

Afthesethis 更改后,一切正常,因为没有权限问题。