将 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 对我来说不是一个选择。