【问题标题】:php odbc_exec doesn't work unless I echo first?除非我先回显,否则 php odbc_exec 不起作用?
【发布时间】:2013-03-17 07:30:43
【问题描述】:

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

我是否遗漏了一些明显的东西?

【问题讨论】:

    标签: php ms-access apache2 odbc


    【解决方案1】:

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

    【讨论】:

    • +1 用于此处的调查工作和后续工作。我要检查的一件事(出于好奇,如果没有别的)是检查每台服务器的phpinfo() 结果,看看是否在麻烦的服务器上安装了任何 apache2 mod_s 或 PHP 扩展全新安装。
    【解决方案2】:

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

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

    编辑:

    除了下面的 cmets,当 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,"text":"foo"},{"ID":2,"text":"bar"},{"ID":3,"text":"baz" }]

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

    【讨论】:

    • 好电话!我一直在使用不同的方法来连接以检索具有相似结果的 json,但我不认为将 apache 排除在等式之外。我已经从命令行运行它,它也对我有用。我确实有其他类似的 php 脚本可以查询 mysql 和 mssql 并且它们运行良好。看起来像是 odbc_exec 触发的 apache2 的错误。
    • 我还应该补充一点,我通常会添加 html 和 body 标签,但我只想为 ajax 调用检索 JSON。打印空白字符似乎暂时将其付诸实施,所以我现在就去做。
    • @RichardGreen 您可以从命令行运行脚本并查看输出,这表明odbc_exec() 工作正常,但您无法看到除非您先回显空格,否则会导致浏览器窗口。这更有可能是因为您发送给浏览器的内容不是有效的 HTML,因此浏览器可能不会按照您认为(希望)的方式运行。
    • 在我的代码中,如果你要替换“print json_encode($arr);”用“print_r($arr);”您会看到,在没有首先回显空白空间的情况下,我确实在屏幕上得到了输出,但它返回了一个空数组。包括空白空间,然后填充数组。我还使用了在这种情况下可以正常工作的其他数据库方法。我只是在将 odbc_exec 命令与 Apache2 结合使用时发现了一个问题。
    • 我在周末进行了一次快速测试,其中我编写了一个简单的脚本来创建对服务器的 URL 请求(因此不涉及浏览器)以检索 JSON,我得到了相同的结果。有空格,一个完整的 JSON 对象,但没有空格,返回一个空对象。似乎当 apache2 不在混合中时, odbc_exec 命令可以正常工作。我无需使用 html 标签就可以回显其他信息,并且由于我需要返回一个真正的 JSON 对象,因此应该不使用 html 标签。
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多