尝试连接并从ToppSpeed数据库中获取信息。
使用Topspeed ODBC Driver正确创建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警告:odbc_exec():SQL错误:[SoftVelocity公司] [TopSpeed ODBC驱动程序] [ISAM] ISAM表未找到,SQL状态S0000在SQLExecDirect中的C:\ inetpub \ wwwroot \ projectFolder \ odbctest.php on第9行
工作:当我使用命令> php -S localhost:8002
在PHP内置服务器上运行相同的文件时
并在http://localhost:8002/odbctest.php
浏览器中运行文件一切正常。
工作:当我在命令行> php odbctest.php
中运行文件时,我从表中获取数据工作正常。
不工作:我在IIS管理器中添加了网站,将网站绑定(物理路径为C:\inetpub\wwwroot\projectFolder
)与本地IP
当我在具有本地IP的浏览器中打开odbctest.php
时,我收到Table NOT Found error.
相同的脚本,唯一不同的是它在命令行上运行而不在IIS服务器上运行,它在PHP内置服务器上运行而不在IIS上运行。
其他技术差异
我已经放了一个PHP文件来查看两台服务器上的PHP信息。 这是我发现的唯一区别。
DSN字符串中没有问题,因为当我使用unknown更改DSN字符串时,它会识别DSN字符串中有错误。
我认为尝试从IIS服务器访问数据时可能存在一些权限问题(PHP在CGI / FastCGI上运行)。
我想知道是否存在权限问题,为什么错误显示表未找到!!
我找不到TopSpeed数据库连接错误的任何好文档,因为此数据库未被广泛使用。
有任何建议或想法吗?请指教。提前谢谢。
答案 0 :(得分:0)
数据库SQL错误未说明任何有关权限的信息,
所以我创建了另一个简单的PHP脚本,用于将数据追加到TEXT文件。
我在IIS服务器上运行了带有两个测试用例的PHP脚本
测试用例1:写一个位于项目目录(同一服务器)中的文本文件 PHP脚本可以正确执行并将数据写入文本文件。
测试案例2:我用文件D:\some_directory\logfile.txt
更改了文本文件路径(位于D盘上)
当我再次运行脚本时,出现以下错误:
警告:file_put_contents(D:\ some_directory \ logfile.txt): 打开流失败:权限被拒绝 第12行的C:\ inetpub \ wwwroot \ project-directory \ write.php
它确认权限存在问题
在IIS管理器中分配给网站的 应用程序池已具有对 D: Driver.
的许可,所以这不是问题。
在更多研究中,我发现
我们首先需要标识用户,我们需要提供权限,并且该用户是“匿名用户身份”的值
https://stackoverflow.com/a/32033941/5236174
我发现匿名用户身份的值不是应用程序池!
我将其更改为应用程序池标识。
因此,现在网站/应用程序的匿名用户身份成为应用程序池,并且具有正确的权限。
此后,由于没有权限问题,一切正常。