2014-10-03 55 views
3

我正在使用CentOS 6.5创建一个通过PHP的Microsoft Access .mdb文件的PDO ODBC连接。ODBC PDO返回'没有收到数据'

我正在使用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; 

编辑:我已经确定,有一个“分段错误”在我试图查询该表。其他表似乎工作正常!

+1

你可以发布你正在使用以试图满足了信息的代码? – Chad 2014-10-14 20:01:04

+0

@cwscribner我在帖子底部添加了一些附加信息。我相信,这个问题不在于我如何抽取数据的SQL,而在于连接字符串本身,如上所述。谢谢。 – 2014-10-14 22:23:12

+0

你解决了这个问题吗? – Dimas 2015-03-18 13:27:33

回答

0

我为您的查询快速搜索,发现这一点:

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

我想你可能要清除浏览器缓存/尝试不同的浏览器。

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

+0

我试过清除缓存,并跨Chrome,Firefox和Internet Explorer。但是,在命令行中运行一个调用连接字符串的文件会导致Line at Error:附近出现语法错误(Segmentation Fault)。其中一些文件由于某种原因被剪切掉了,但它有帮助 – 2014-10-14 22:35:08

+0

在检查另一个文件时,在线显示Error:syntax.start附近的语法错误probems.start是我的SQL查询的一部分,所以或许我错误地认为它是连接字符串,并且实际上是我的SQL语句 – 2014-10-14 23:19:08

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)); 
} 
+0

应该将用户名和密码留空ODBC.INI内如果没有用户名和密码 做上述仍会导致Web浏览器说 无法载入网页,因为服务器未发送任何数据 错误代码:?ERR_EMPTY_RESPONSE – 2014-10-15 02:37:12

+0

在填写密码刚需安全 – meda 2014-10-15 02:43:26

+0

如果我放入不正确的DSN,相应的错误消息显示SQLSTATE [IM002]。如果我放入正确的仪表板,则不显示PHP错误消息,而是显示浏览器错误消息。我不知道如何诊断这一点。 – 2014-10-15 02:51:35