waterc 发表于 2010-10-13 01:21:19

数据库连续查询出错的问题

$db->select ( '*' );
$db->where ( "sitename", "aaa" );
$db->limit ( 1 );
$query = $db->get ( 'classlist' );
$name = $query->result_array ();

$db->select ( 'count(*) as c' );
$db->where ( "url", 'fdsafdsf');
$db->limit ( 1 );
$query = $db->get ( 'base' );
$name2 = $query->result_array ();

我这么执行完了以后,两个结果都是一样的,都是第一次查询的结果,也就是第二次的结果没了.
大家遇到过这个问题吗,都怎么解决的.

waterc 发表于 2010-10-13 12:27:56

来个人说一下好吧,我可不想每次用的时候都初始化数据库啊.

waterc 发表于 2010-10-13 14:29:45

我在第二次查询的时候打印$query 这个变量,会出现
["queries"]=>
array(2) {
    =>
    string(66) "SELECT *
FROM (`classlist`)
WHERE `sitename` = 'aaa'
LIMIT 1"
    =>
    string(67) "SELECT count(*) as c
FROM (`base`)
WHERE `url` = 'fdsafdsf'
LIMIT 1"
}
["query_times"]=>
array(2) {
    =>
    float(0.033381938934326)
    =>
    float(0.013278961181641)
}
这样的结果

qi_ruo 发表于 2010-10-13 14:40:36

本帖最后由 qi_ruo 于 2010-10-13 14:49 编辑

LZ 你用的是codeIgniter自带的DB库吗
query 变量var_dump出来应该是个CI_DB_mysql_result对象啊
像下面这个样子
object(CI_DB_mysql_result)
public 'conn_id' => resource(28, mysql link)
public 'result_id' => resource(32, mysql result)
public 'result_array' =>
    array
      0 =>
      array
          'c' => string '0' (length=1)
public 'result_object' =>
    array
      empty
public 'current_row' => int 0
public 'num_rows' => int 1
public 'row_data' => null

LZ 最好还是贴出你的db是怎么设置和连接的吧

waterc 发表于 2010-10-13 15:11:54

我是把ci的db库完整的拿到了我自己的一个东西里面了,不过基本没改过.
数据库连接用的是
$param_array = array ('username' => 'root', 'password' => 'mysql', 'database' => 'allmybase' );
$db = new CI_DB_active_record ( $param_array );
数据库配置基本没怎么改过是

        var $username;
        var $password;
        var $hostname = 'localhost';
        var $database;
        var $dbdriver = 'mysql';
        var $dbprefix = '';
        var $char_set = 'utf8';
        var $dbcollat = 'utf8_general_ci';
        var $autoinit = TRUE; // Whether to automatically initialize the DB
        var $swap_pre = '';
        var $port = '';
        var $pconnect = FALSE;
        var $conn_id = FALSE;
        var $result_id = FALSE;
        var $db_debug = TRUE;
        var $benchmark = 0;
        var $query_count = 0;
        var $bind_marker = '?';
        var $save_queries = TRUE;
        var $queries = array ();
        var $query_times = array ();
        var $data_cache = array ();
        var $trans_enabled = TRUE;
        var $trans_strict = TRUE;
        var $_trans_depth = 0;
        var $_trans_status = TRUE; // Used with transactions to determine if a rollback should occur
        var $cache_on = FALSE;
        var $cachedir = '';
        var $cache_autodel = FALSE;
        var $CACHE; // The cache class object
       

        // Private variables
        var $_protect_identifiers = TRUE;
        var $_reserved_identifiers = array ('*' ); // Identifiers that should NOT be escaped
       

        // These are use with Oracle
        var $stmt_id;
        var $curs_id;
        var $limit_used;
       
        /**
       * Constructor.Accepts one parameter containing the database
       * connection settings.
       *
       * @param array
       */
        var $result_array = array ();
        var $result_object = array ();
        var $current_row = 0;
        var $row_data = NULL;
query完整的是
object(CI_DB_active_record)#1 (73) {
["ar_select"]=>
array(0) {
}
["ar_distinct"]=>
bool(false)
["ar_from"]=>
array(0) {
}
["ar_join"]=>
array(0) {
}
["ar_where"]=>
array(0) {
}
["ar_like"]=>
array(0) {
}
["ar_groupby"]=>
array(0) {
}
["ar_having"]=>
array(0) {
}
["ar_limit"]=>
bool(false)
["ar_offset"]=>
bool(false)
["ar_order"]=>
bool(false)
["ar_orderby"]=>
array(0) {
}
["ar_set"]=>
array(0) {
}
["ar_wherein"]=>
array(0) {
}
["ar_aliased_tables"]=>
array(0) {
}
["ar_store_array"]=>
array(0) {
}
["ar_caching"]=>
bool(false)
["ar_cache_exists"]=>
array(0) {
}
["ar_cache_select"]=>
array(0) {
}
["ar_cache_from"]=>
array(0) {
}
["ar_cache_join"]=>
array(0) {
}
["ar_cache_where"]=>
array(0) {
}
["ar_cache_like"]=>
array(0) {
}
["ar_cache_groupby"]=>
array(0) {
}
["ar_cache_having"]=>
array(0) {
}
["ar_cache_orderby"]=>
array(0) {
}
["ar_cache_set"]=>
array(0) {
}
["username"]=>
string(4) "root"
["password"]=>
string(5) "mysql"
["hostname"]=>
string(9) "localhost"
["database"]=>
string(9) "allmybase"
["dbdriver"]=>
string(5) "mysql"
["dbprefix"]=>
string(0) ""
["char_set"]=>
string(4) "utf8"
["dbcollat"]=>
string(15) "utf8_general_ci"
["autoinit"]=>
bool(true)
["swap_pre"]=>
string(0) ""
["port"]=>
string(0) ""
["pconnect"]=>
bool(false)
["conn_id"]=>
resource(13) of type (mysql link)
["result_id"]=>
resource(15) of type (mysql result)
["db_debug"]=>
bool(true)
["benchmark"]=>
float(0.0023801326751709)
["query_count"]=>
int(2)
["bind_marker"]=>
string(1) "?"
["save_queries"]=>
bool(true)
["queries"]=>
array(2) {
    =>
    string(60) "SELECT *
FROM (`classlist`)
WHERE `sitename` = 'fda'
LIMIT 1"
    =>
    string(67) "SELECT count(*) as c
FROM (`base`)
WHERE `url` = 'fdsafdsf'
LIMIT 1"
}
["query_times"]=>
array(2) {
    =>
    float(0.0020830631256104)
    =>
    float(0.00029706954956055)
}
["data_cache"]=>
array(0) {
}
["trans_enabled"]=>
bool(true)
["trans_strict"]=>
bool(true)
["_trans_depth"]=>
int(0)
["_trans_status"]=>
bool(true)
["cache_on"]=>
bool(false)
["cachedir"]=>
string(0) ""
["cache_autodel"]=>
bool(false)
["CACHE"]=>
NULL
["_protect_identifiers"]=>
bool(true)
["_reserved_identifiers"]=>
array(1) {
    =>
    string(1) "*"
}
["stmt_id"]=>
NULL
["curs_id"]=>
NULL
["limit_used"]=>
NULL
["result_array"]=>
array(0) {
}
["result_object"]=>
array(0) {
}
["current_row"]=>
int(0)
["row_data"]=>
NULL
["_escape_char"]=>
string(1) "`"
["_like_escape_str"]=>
string(0) ""
["_like_escape_chr"]=>
string(0) ""
["delete_hack"]=>
bool(true)
["_count_string"]=>
string(19) "SELECT COUNT(*) AS "
["_random_keyword"]=>
string(7) " RAND()"
["num_rows"]=>
int(1)
}

waterc 发表于 2010-10-13 15:13:55

现在我想不明白的就是,在query里面我的两次查询语句变成了一个数组,但我只能取到数组第一个语句的结果

sonic 发表于 2010-10-13 16:43:43

太长了,这种代码还不够懒惰。

waterc 发表于 2010-10-13 17:55:28

我研究了一些db类的代码 改了两个地方在

        function result_array() 里面加上了$this->result_array = array ();
在function result_object() 加上了$this->result_object = array ();
也就是我手动在代码里面.刚加上没发现什么异常

visvoy 发表于 2010-10-14 08:40:13

输出语句完全正常,所以不是CI的问题,有可能是楼主更改CI源码造成的
页: [1]
查看完整版本: 数据库连续查询出错的问题