ODBC PDO 返回“未收到数据”
Posted
技术标签:
【中文标题】ODBC PDO 返回“未收到数据”【英文标题】:ODBC PDO returning 'No data received' 【发布时间】:2014-11-28 03:52:29 【问题描述】:我正在使用 CentOS 6.5 通过 php 创建与 Microsoft Access .mdb 文件的 PDO ODBC 连接。
我正在使用 MDBTools 和 unixODBC。
我的 odbcinst.ini 看起来像这样
[MDBToolsODBC]
Description=MDBTools Driver
Driver=/usr/lib64/libmdbodbc.so.0.0.0
FileUseage=1
Threading=1
我的 odbc.ini 看起来像这样
[dashboard]
Description = Dashboard
Driver = MDBToolsODBC
Servername = localhost
Database = /mnt/inetpub/databases/dashboard.mdb
Username =
Password =
我正在尝试像这样通过 PHP 进行连接
$db = new PDO("odbc:DRIVER=MDBToolsODBC;DSN=dashboard;");
在收到错误消息数小时后,我终于能够解决所有问题,但现在当我尝试连接时,谷歌浏览器说
No data received
Unable to load the webpage because the server sent no data.
Error code: ERR_EMPTY_RESPONSE
我不确定这是不是因为我的 DSN 设置。当我执行isql dashboard
时,我得到了
+----------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+----------------------------------+
不知道如何解决这个问题,因为这是我第一次使用任何形式的 linux。
这是我尝试从数据库中调用信息的方式。
在需要数据库信息的文件中,我使用
<?php
include("inc/config.php");
?>
注释掉连接字符串
//$db = new PDO("odbc:DRIVER=MDBToolsODBC;DSN=dashboard;");
允许加载 html 和 CSS,但当然不会从数据库中提取数据。这就是让我认为某种连接字符串存在问题的原因。
我正在尝试像这样执行一个简单的 SQL 查询,这比我在开发中需要运行和使用的查询要简单得多,但如果我能得到这样简单的工作,我可以弄清楚其余的。
$problems = $db->prepare("SELECT problems.id FROM problems;");
$problems->execute();
$result = $problems->fetchColumn();
echo $result;
编辑:我发现我要查询的表中存在“分段错误”。其他表似乎工作正常!
【问题讨论】:
你能发布你用来提供信息的代码吗? @cwscribner 我在帖子底部添加了一些附加信息。我相信,问题不在于我如何提取数据的 SQL,而在于连接字符串本身,如上所述。谢谢。 问题解决了吗? 【参考方案1】:我快速搜索了您的查询并找到了这个:
http://www.wix.com/support/html5/ugc/1f678e95-c707-45c8-90ca-86a48ee98a38/2d8fe37b-cc02-4582-97da-9a93d5426a55
我认为您可能想要清除浏览器缓存/尝试使用其他浏览器。
另一种选择是通过命令行#php /your/script/path 试试看是否这样运行成功。
【讨论】:
我尝试过清除缓存并跨 Chrome、Firefox 和 Internet Explorer。但是,在命令行中运行一个调用连接字符串的文件会导致 Error at Line: Syntax error near ( Segmentation Fault。其中一些由于某种原因被删除,但它很有帮助。 在检查另一个文件时,它显示行错误:problems.start 附近的语法错误。 probems.start 是我的 SQL 查询的一部分,所以也许我认为它是连接字符串并且实际上是我的 SQL 语句是不正确的。【参考方案2】:数据源的全部意义在于您将配置存储在odbc.ini
中。
try
$db = new PDO("odbc:dashboard");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
catch(PDOException $ex)
echo 'Connection failed: ' . $e->getMessage();
die(var_dump($ex));
应该足够了,如果它不起作用你需要得到错误,阅读错误并修复,命令有效,所以将用户名和密码输入odbc.ini
并尝试一下
用户名和密码也是 PDO 构造函数的参数,您可以通过指定所有内容来尝试连接:
try
$db = new PDO("odbc:dashboard", $username, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
catch(PDOException $ex)
echo 'Connection failed: ' . $e->getMessage();
die(var_dump($ex));
【讨论】:
如果没有用户名和密码,在odbc.ini中用户名和密码是否应该留空?执行上述操作仍会导致 Web 浏览器显示无法加载网页,因为服务器未发送数据。错误代码:ERR_EMPTY_RESPONSE 填写密码以防万一 如果我输入了不正确的 DSN,相应的错误消息会显示 SQLSTATE[IM002]。如果我输入正确的仪表板,则不会显示 PHP 错误消息,而是显示浏览器错误消息。我不确定如何诊断。 这听起来更像是浏览器问题而不是 PDO,因为连接正常 我开始认为这是由我的数据库中的一个大表引起的分段错误。使用 isql 执行查询,例如 select * from largetable 可以工作,但是当我在 isql 中执行帮助 largetable 时,出现分段错误。我已经能够通过简单的查询成功地查询其他表。以上是关于ODBC PDO 返回“未收到数据”的主要内容,如果未能解决你的问题,请参考以下文章