用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3988|回复: 5
收起左侧

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

[复制链接]
发表于 2008-3-24 17:00:13 | 显示全部楼层 |阅读模式
问题:“在模板里定义了两个不同的方法(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();
    }


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


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


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


        $query2->free_result();
        return $data2;
    }
}
发表于 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/
 楼主| 发表于 2008-3-24 17:48:18 | 显示全部楼层
原帖由 Hex 于 2008-3-24 17:19 发表
根据你的情况看来是 Oracle 驱动有问题?我没有 Oracle 数据库。。。

谢谢哥们的关注,你指的驱动是指的是php_oci8.dll有问题?
发表于 2008-3-24 17:57:28 | 显示全部楼层
呵呵,沧蓝已经回答的很好了!
是 CI 的 Oracle  驱动 BUG,解决方案我贴出来:

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

PHP复制代码
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));
}
复制代码
 楼主| 发表于 2008-3-24 18:37:35 | 显示全部楼层
原帖由 沧蓝 于 2008-3-24 17:45 发表
是CI Oracle驱动的bug。已经有人在四个多月前提交bug报告了,被CI官方无视了。不过好在有解决方案:http://codeigniter.com/bug_tracker/bug/2985/

初来乍到,听朋友讲这柜架各方面还不错,谢谢哥们提供的解决方案,谨祝顺利!~

本版积分规则