water 发表于 2008-3-24 17:00:13

oracle两次查询,得出同一结果,而Mysql返回不 同的结果。

问题:“在模板里定义了两个不同的方法(m1,m2),功能是取不同表内容;控制器的一个方法cf_m1调用m1,m2,而结果却是:m2返回的结果m1相同”。
但我换成mysql,则正常(取出了不同的数据)各代码如下:
数据库配置代码:(数据库连接正常)
$host = '192.168.0.1';
$port = '1521';
$sid = 'testdb';
$NLS_LANG = "NA";
$tns = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=$host)(PORT= 1521)))(CONNECT_DATA=(SID = $sid)(SERVER = DEDICATED)))";

$db['default']['hostname'] = $tns;
$db['default']['username'] = "root";
$db['default']['password'] = "123456";
$db['default']['database'] = "testdb";
$db['default']['dbdriver'] = "oci8";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";


控制器代码:
class MyController extends Controller
{
    function MyController()
    {
      parent::Controller();
      $this->load->model('myModelDir', 'MyModel');
      return;
    }


    function cf_m1()
    {
      $data['data1'] = $this->MyModel->m1();//return array
      $data['data2'] = $this->MyModel->m2();//return array


      print_r($data['data1']);
      /*问题就在这,两次打印出来的结果是一样的可如果换成是Mysql,MSSQL则返回不同的结果*/
      print_r($data['data2']);


      $this->load->view('myView', $data);
    }
}


模式文件代码:
class MyModel extends Model
{
    function MyModel()
    {
      parent::Model();
    }


    functionm1()
    {
      $query1 = '';
      $data1 = array();
      $query1 = $this->db->query("select * from tb1");//table 1
      $data1 = $query1->row_array();


      $query1->free_result();
      return $data1;
    }


    functionm2()
    {
      $query2 = '';
      $data2 = array();
      $query2 = $this->db->query("select * from tb2");//table 1
      $data2 = $query2->row_array();


      $query2->free_result();
      return $data2;
    }
}

Hex 发表于 2008-3-24 17:19:14

根据你的情况看来是 Oracle 驱动有问题?我没有 Oracle 数据库。。。

沧蓝 发表于 2008-3-24 17:45:51

是CI Oracle驱动的bug。已经有人在四个多月前提交bug报告了,被CI官方无视了。不过好在有解决方案:http://codeigniter.com/bug_tracker/bug/2985/

water 发表于 2008-3-24 17:48:18

原帖由 Hex 于 2008-3-24 17:19 发表 http://codeigniter.org.cn/forums/images/common/back.gif
根据你的情况看来是 Oracle 驱动有问题?我没有 Oracle 数据库。。。
谢谢哥们的关注,你指的驱动是指的是php_oci8.dll有问题?

Hex 发表于 2008-3-24 17:57:28

呵呵,沧蓝已经回答的很好了!
是 CI 的 Oracle驱动 BUG,解决方案我贴出来:

修改 database/drivers/oci8/oci8_driver.php 文件的 _set_stmt_id 方法为:

function _set_stmt_id($sql)
{
        if ( ! is_resource($this->stmt_id))
        {
                $this->stmt_id = ociparse($this->conn_id, $this->_prep_query($sql));
        }
        $this->stmt_id = ociparse($this->conn_id, $this->_prep_query($sql));
}

water 发表于 2008-3-24 18:37:35

原帖由 沧蓝 于 2008-3-24 17:45 发表 http://codeigniter.org.cn/forums/images/common/back.gif
是CI Oracle驱动的bug。已经有人在四个多月前提交bug报告了,被CI官方无视了。不过好在有解决方案:http://codeigniter.com/bug_tracker/bug/2985/
初来乍到,听朋友讲这柜架各方面还不错,谢谢哥们提供的解决方案,谨祝顺利!~
页: [1]
查看完整版本: oracle两次查询,得出同一结果,而Mysql返回不 同的结果。