我们有一个旧的应用程序使用Perl-5.8.5.8可以正常工作,但在Perl-5.8.8上不再有用,我确信这是一个简单的改变,但我找不到它.
DBD::mysql::st execute failed: Unknown column 'stores.id' in 'on clause' at /var/www/cgi-bin/app/list.cgi line 70
这是第70行的背景
my $sth=$dbh->prepare($sql); $sth->execute(); ################Line 70
这是完整的计划
#!/usr/bin/perl do "share.pl"; sub get_propertytable { my ($id, $devicename) = @_; my $content = "
$devicename $id | |
---|---|
$propname | : $propvalue |
Store $id |
---|
$storename | |
---|---|
Address : | $address |
Post Code : | $postcode |
Phone No : | $phoneno |
Franchise $id |
---|
$company | |
---|---|
Contact Name : | $contactname |
Contact No : | $contactno |
Email : |
ysth.. 9
我怀疑你已经升级到更新的MySQL服务器版本了.
像这样的查询:
FROM stores, storetradingpartner, tradingpartner LEFT JOIN devices ON devices.store = stores.id
我相信,从MySQL 4.0 5.0.12开始,我的解析方式不同.您应该避免将隐式连接(例如table, table2, table3
)与显式连接(例如)混合使用LEFT JOIN
.
试试这个:
FROM stores INNER JOIN storetradingpartner ON stores.id = storetradingpartner.storeid INNER JOIN tradingpartner ON tradingpartner.id = storetradingpartner.partnerid LEFT JOIN devices ON devices.store = stores.id ORDER BY...
http://dev.mysql.com/doc/refman/5.5/en/join.html:
以前,逗号运算符(,)和JOIN都具有相同的优先级,因此连接表达式t1,t2 JOIN t3被解释为((t1,t2)JOIN t3).现在JOIN具有更高的优先级,因此表达式被解释为(t1,(t2 JOIN t3)).此更改会影响使用ON子句的语句,因为该子句只能引用连接操作数中的列,并且优先级的更改会更改这些操作数的解释.
请注意,5.0.1和5.0.12中还有其他连接更改,以使MySQL更符合SQL标准,其中一些将导致返回行的差异,而不仅仅是产生错误,就像在这种情况下一样.
我怀疑你已经升级到更新的MySQL服务器版本了.
像这样的查询:
FROM stores, storetradingpartner, tradingpartner LEFT JOIN devices ON devices.store = stores.id
我相信,从MySQL 4.0 5.0.12开始,我的解析方式不同.您应该避免将隐式连接(例如table, table2, table3
)与显式连接(例如)混合使用LEFT JOIN
.
试试这个:
FROM stores INNER JOIN storetradingpartner ON stores.id = storetradingpartner.storeid INNER JOIN tradingpartner ON tradingpartner.id = storetradingpartner.partnerid LEFT JOIN devices ON devices.store = stores.id ORDER BY...
http://dev.mysql.com/doc/refman/5.5/en/join.html:
以前,逗号运算符(,)和JOIN都具有相同的优先级,因此连接表达式t1,t2 JOIN t3被解释为((t1,t2)JOIN t3).现在JOIN具有更高的优先级,因此表达式被解释为(t1,(t2 JOIN t3)).此更改会影响使用ON子句的语句,因为该子句只能引用连接操作数中的列,并且优先级的更改会更改这些操作数的解释.
请注意,5.0.1和5.0.12中还有其他连接更改,以使MySQL更符合SQL标准,其中一些将导致返回行的差异,而不仅仅是产生错误,就像在这种情况下一样.