2015-05-10 31 views
1

我的脑袋为什么下面的代码不能工作,需要一些新鲜的眼睛。已经在RazorSQL中测试过SQL查询,它返回值,但我不能让这个工作在PHP中。没有连接或声明错误。我想这与'i5_libl'有关,但还没有找到任何解决方法。有任何想法吗?通过PHP的DB2 SQL查询不返回结果

<?php 

class employees 
{ 
    private $employees = array(); 
    private $db_host = '*LOCAL'; 
    private $db_options = array(
     'i5_naming' => DB2_I5_NAMING_ON, 
     'i5_libl' => 'CLTDTA CLTPAY' 
    ); 

    public function getList() { 
     $connection = db2_connect($this->db_host,$GLOBALS['db_user'],$GLOBALS['db_password'],$this->db_options); 
     echo db2_conn_error(); 
     echo db2_conn_errormsg(); 
     $sql='SELECT F0101.ABAN8, F0101.ABALPH FROM F0101 INNER JOIN FP0102 ON F0101.ABAN8=FP0102.VEAN8 WHERE FP0102.VESTAT=\'\''; 
     $stmt= db2_prepare($connection,$sql); 
     echo db2_stmt_error(); 
     echo db2_stmt_errormsg(); 
     $result= db2_execute($stmt); 
     while ($row = db2_fetch_assoc($stmt)) { 
      echo $row['ABAN8']; 
     } 
     db2_close($connection); 
     return true;    
    } 

} 
?> 

!!更新:

我试着切换DB2_I5_NAMING_ON和DB2_I5_NAMING_OFF,并对查询进行更正,但仍然没有任何结果。在我看来,这更多地与特定的图书馆(CLTDTA)有关。当我在CLTPAY上运行一个vanilla SELECT查询时,我得到了一个很好的结果。当我尝试在CLTDTA上的等价物时,我没有得到结果。用户使用包含对所有相关库(包括CLTDTA)的引用的系统库列表。

+0

我现在没有任何东西需要测试,但我相信通过设置DB2_I5_NAMING_ON,您必须使用'/'而不是'。'来限定文件。我会尝试禁用它来查看行为是否有任何改变。 –

+0

@Bob这是[2012年改回](https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/IBM%20i%20Technology%20Updates/page/System%使用技术更新(即团队PTF,如服务包)20%20%20%20%20%20%20%28%29%20%和%20%28%29%只要系统保持远程更新,这应该不是问题。 – WarrenT

+0

我尝试切换DB2_I5_NAMING_ON和DB2_I5_NAMING_OFF,并对查询进行更正,但仍然没有任何结果。在我看来,这更多地与特定的图书馆(CLTDTA)有关。当我在CLTPAY上运行一个vanilla SELECT查询时,我得到了一个很好的结果。当我尝试在CLTDTA上的等价物时,我没有得到结果。用户使用包含对所有相关库(包括CLTDTA)的引用的系统库列表。 –

回答

0

错误是呼应正在执行的每个步骤除了为执行。在EXECUTE之后添加这些相同的请求,就像在CONNECT和PREPARE步骤之后完成一样。

如果仍然不明显,请打开调试消息功能[通过连接,通过启动服务作业(STRSRVJOB),然后启动调试服务(STRDBG)或使用QAQQINI功能]并查看作业日志为连接提供服务。也许还可能启动一个详细的数据库监控;启动数据库监视器(STRDBMON)以验证传入语句。如果仍然没有任何明显的迹象,那么也得到一个工作跟踪,然后从跟踪数据验证[即有效的调试跟踪数据记录vs执行流记录],查询请求正在打开正确\期望的文件。