除非我先回声,否则php odbc_exec不起作用?

时间:2013-03-27 09:08:06

标签: php ms-access apache2 odbc

我正在尝试使用php odbc_connect和odbc_exec查询访问MDB文件。我的想法是返回一个数组,然后我可以将其转换为json。

我在Ubuntu 12.10上通过apache2运行php

这是我的代码:

//Connect to the database
$conn=odbc_connect('stock-test','','');

//die if error
if (!$conn) {
    die("Connection Failed: " . $conn);
} 
//SQL query
$sql = "SELECT * FROM Stk_Items";

//This is the print command...see notes below for this
//print " "

//Execute SQL query
$rs=odbc_exec($conn,$sql);

//If no result, there is an error in the SQL
if (!$rs) {
    exit("Error in SQL");
}

//Create an array to contain the results...
$arr = array();

//Loop through the results, pushing each array to the $arr array
while ($row = odbc_fetch_array($rs)) {
    array_push($arr, $row);
}

print json_encode( $arr);


odbc_close($conn);

现在这是奇怪的事情。如果在发出odbc_exec命令之前打印空格(或任何其他字符),此代码将仅输出json(我已在上面的代码中注释掉该命令)

我还运行了几个其他测试(回显结果等),但除非我在odbc_exec命令之前打印一些空格,否则没有任何测试。

我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:2)

我设置了一台虚拟机并从头开始重新安装,以查看新版本上是否存在问题。它并没有让我相信在现场机器上构建Apache存在问题。在过去的几天里,我通过存储库删除并添加了Apache,并通过apt-get添加了所有最新的更新,现在问题似乎得到了解决 - 非常沮丧,因为最新的更新通常会应用,所以我只能想象必须有的东西最初安装apache2或php5-odbc时出错了。

答案 1 :(得分:0)

你所描述的对我来说听起来像阿帕奇怪癖。如果您使用Web浏览器触发PHP脚本并检查结果,那么您确实应该先输出至少<html><body>。如果您希望以合理的不受干扰的形式查看结果,您也应该回显<pre>标记。

FWIW,我从命令行按原样运行你的代码,它对我来说很好。

编辑:

继续下面的评论,当apache2调用使用odbc_exec()的PHP脚本时,这确实看起来很奇怪。为了测试,我在我的Ubuntu 12.04 LAMP服务器上创建了以下“页面”...

<?php
$arr = array(
    array('ID' => 1, 'text' => 'foo'), 
    array('ID' => 2, 'text' => 'bar'), 
    array('ID' => 3, 'text' => 'baz')
    );
print json_encode($arr);

...并且Firefox确实显示JSON字符串,如下所示......

[{ “ID”:1, “文”: “富”},{ “ID”:2 “文本”: “酒吧”},{ “ID”:3 “文本”: “baz” 的}]

...所以apache2没有问题吐出一个简单的JSON字符串,Firefox没有问题显示它。