排查问题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;