ODBC PDO返回“没有收到数据”

时间:2014-10-03 03:43:47

标签: php linux pdo odbc dsn

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

收到错误消息数小时后,我终于能够解决所有问题了,但现在当我尝试连接时,Google 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;

编辑:我发现有一个“分段错误”&#39;在表中我试图查询。其他表似乎工作正常!

2 个答案:

答案 0 :(得分:1)

数据源的重点是您将配置存储在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));
}

答案 1 :(得分:0)

我快速搜索了您的查询,发现了这个:

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

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

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