在将php从5.2.10版本升级到5.3.3之后,我在使用在5.2.10中运行良好的odbc查询时遇到了一组非常奇怪的错误。
当我运行以下查询时,我得到了很多未定义的属性:stdClass::$username最终以允许内存耗尽错误结束:
$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);
奇怪的是,如果我在没有"username"别名的情况下运行这段代码,并使用下面查询中显示的表名,它就可以正常工作:
$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(*)语句中使用alias,它也可以正常工作,但一旦我用别名替换表名,一切都会出错。
我在iSQL中尝试了使用别名的查询,它的工作原理与预期的一样,所以unixODBC和FreeTDS正在工作。
我已经在这里和谷歌上搜索了所有我能找到的材料,但没有得到任何答案来解释为什么会发生这种情况。
如果这里有人知道这里发生了什么,请不胜感激,因为在我看来,这似乎与别名有关,而且我经常使用别名。
BTW:很遗憾,升级php对我来说不是一个选择。
在我的案例中,问题是重音字符(西班牙语)。我解决了在每个SELECT上用这个字符向每个字段添加Collate SQL_Latin1_General_CP1253_CI_AI
的问题。