php使用odbc执行复杂函数遇到的问题,sql语句直接在sqlserver数据库中运行有结果,使用php总是为空


排查问题1、$res = odbc_exec($this->conn,$sql);查看执行是否正确。使用 $errorcode=odbc_error($res); var_dump(odbc_errormsg());,均返回null

排查问题2、打印出的sql语句,与复制到sqlsever查询器中语句,发现sqlserver查询器会自动检查语法错误,如联合表查询,查询器将会自动将语句中使用的字段匹配上数据表名。

这就是为什么同样的语句在sqlserver查询器中可以执行,在php代码中不能执行的原因了。特此谨记,联合表查询一定要带上数据表名

排除问题3.在我将所有表名补充完整后,还是不能执行,最终发现,在我使用  while(odbc_fetch_row($res))之前,调试的时候将var_dump(odbc_fetch_row($res));进行了打印,结果就一直查询不出来,去掉调试的语句,执行结果正常。

 public function query($sql)
   {
      // $sql="select * from orgsignin where orgid=8100001";
       if (!function_exists('odbc_fetch_array')) {
           function odbc_fetch_array($result, $rownumber=null) {

               $array = array();
               if (!($cols = odbc_fetch_into($result, $result_array, $rownumber))) {
                   return false;
               }
               for ($i = 1; $i <= $cols; $i++) {
                   $array[odbc_field_name($result, $i)] = $result_array[$i - 1];
               }
               return $array;
           }
       }
       else
       {
          // echo "fuc exit;";
          // print_r($this);     
           $res = odbc_exec($this->conn,$sql);
        //  var_dump($this->conn);
          var_dump($res);
           $errorcode=odbc_error($res);
       //    var_dump($errorcode);
        //   var_dump(odbc_errormsg());
           $thisData = "";
           $i = 0;
           $j = 0;
           $num_rows = 0;
        //   var_dump(odbc_fetch_row($res));


          //   var_dump(odbc_fetch_row($res));
             while(odbc_fetch_row($res)) {

                 $num_rows++;

                 //Build tempory
                 for ($j = 1; $j <= odbc_num_fields($res); $j++) {
                     $field_name = odbc_field_name($res, $j);
                     //  $this->temp_fieldnames[$j] = $field_name;
                     $ar[$field_name] = odbc_result($res, $field_name) . "";
                 }

                 $thisData[$i] = $ar;
                 $i++;
             }
         }






    var_dump($thisData);
       return $thisData;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值