3

我正在尝试使用 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 命令之前打印一些空格,否则没有一个可以工作。

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

4

2 回答 2

2

我设置了一个虚拟机并从头开始重新安装,以查看新版本是否再次存在问题。事实并非如此,这让我相信在现场机器上构建 Apache 存在问题。在过去的几天里,我已经通过存储库删除和添加了 Apache,并通过 apt-get 添加了所有最新更新,现在问题似乎已经解决 - 由于通常会应用最新更新,因此我只能想象必须有一些东西apache2 或 php5-odbc 的初始安装出错了。

于 2013-04-05T06:35:05.113 回答
0

你所描述的对我来说听起来像是一个 apache 怪癖。如果您使用 Web 浏览器来触发 PHP 脚本并检查结果,那么您确实应该至少<html><body>在其他任何事情之前输出。如果您想以合理的不受干扰的形式查看结果,您也应该回显一个<pre>标签。

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

编辑:

除了下面的评论,当 apache2 调用一个使用odbc_exec(). 为了测试,我在我的 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,"text":"foo"},{"ID":2,"text":"bar"},{"ID":3,"text":"baz"}]

...所以 apache2 吐出一个纯 JSON 字符串没有问题,而 Firefox 显示它也没有问题。

于 2013-03-27T09:40:57.410 回答