ODBC PDO返回';未收到任何数据';


ODBC PDO returning 'No data received'

我使用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;");

经过几个小时的错误消息,我终于能够解决所有问题,但现在当我尝试连接时,谷歌Chrome表示

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;

编辑:我发现我试图查询的表中存在"分段故障"。其他桌子似乎工作正常!

我快速搜索了您的查询,发现了以下内容:

http://www.wix.com/support/html5/ugc/1f678e95-c707-45c8-90ca-86a48ee98a38/2d8fe37b-cc02-4582-97da-9a93d5426a55

我想你可能想清除浏览器缓存/尝试其他浏览器。

另一种选择是通过命令行#php/your/script/path进行尝试,看看它是否以这种方式成功运行。

数据源的全部意义在于将配置存储在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));
}