1

将 php 从版本 5.2.10 升级到 5.3.3 后,我在使用在 5.2.10 中运行良好的 odbc 查询时遇到了一组非常奇怪的错误。

当我运行如下查询时,我得到了很多Undefined Property: stdClass::$username最终以Memory Exhaust Allowed错误结束:

    $conn = odbc_connect("dsn", "user", "pw") or die(odbc_error_msg()); 

    $query = "select usr_n as username from usr";
    $rs = odbc_exec($conn,$query);

    while ($rows = odbc_fetch_object($rs)) {
        echo "$rows->username";
        }
    odbc_free_result($rs);
    odbc_close($conn);

奇怪的是,如果我在没有“用户名”别名的情况下运行此代码并使用下面查询中显示的表名,它可以正常工作:

    $conn = odbc_connect("dsn", "user", "pw") or die(odbc_error_msg()); 

    $query = "select usr_n from usr";
    $rs = odbc_exec($conn,$query);

    while ($rows = odbc_fetch_object($rs)) {
        echo "$rows->usr_n";
        }
    odbc_free_result($rs);
    odbc_close($conn);

另外,如果我将别名与 count(*) 语句一起使用,它可以正常工作,但是一旦我用别名替换表名,一切都会出错。

我用别名在 iSQL 中尝试了查询,它的工作方式与预期的一样,所以 unixODBC 和 FreeTDS 正在工作。

我已经搜索了我可以在这里和谷歌找到的所有材料,但没有得到任何答案来解释为什么会发生这种情况。

如果有人对这里发生的事情有所了解,我将不胜感激,因为在我看来,这与别名有关,而且我经常使用别名。

顺便说一句:很遗憾,升级 php 对我来说不是一个选择。

4

1 回答 1

0

就我而言,问题是重音字符(西班牙语)。我解决了这个添加Collate SQL_Latin1_General_CP1253_CI_AI到每个 SELECT 上的这个字符的每个字段。

于 2017-02-24T16:10:46.047 回答