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

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

[复制链接]
发表于 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 ();

我这么执行完了以后,两个结果都是一样的,都是第一次查询的结果,也就是第二次的结果没了.
大家遇到过这个问题吗,都怎么解决的.
 楼主| 发表于 2010-10-13 12:27:56 | 显示全部楼层
来个人说一下好吧,  我可不想每次用的时候都初始化数据库啊.
 楼主| 发表于 2010-10-13 14:29:45 | 显示全部楼层
我在第二次查询的时候打印$query 这个变量,会出现
["queries"]=>
  array(2) {
    [0]=>
    string(66) "SELECT *
FROM (`classlist`)
WHERE `sitename` = 'aaa'
LIMIT 1"
    [1]=>
    string(67) "SELECT count(*) as c
FROM (`base`)
WHERE `url` = 'fdsafdsf'
LIMIT 1"
  }
  ["query_times"]=>
  array(2) {
    [0]=>
    float(0.033381938934326)
    [1]=>
    float(0.013278961181641)
  }
这样的结果
发表于 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)[13]
  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是怎么设置和连接的吧
 楼主| 发表于 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 );
数据库配置基本没怎么改过是
PHP复制代码
 
        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完整的是
  1. object(CI_DB_active_record)#1 (73) {
  2.   ["ar_select"]=>
  3.   array(0) {
  4.   }
  5.   ["ar_distinct"]=>
  6.   bool(false)
  7.   ["ar_from"]=>
  8.   array(0) {
  9.   }
  10.   ["ar_join"]=>
  11.   array(0) {
  12.   }
  13.   ["ar_where"]=>
  14.   array(0) {
  15.   }
  16.   ["ar_like"]=>
  17.   array(0) {
  18.   }
  19.   ["ar_groupby"]=>
  20.   array(0) {
  21.   }
  22.   ["ar_having"]=>
  23.   array(0) {
  24.   }
  25.   ["ar_limit"]=>
  26.   bool(false)
  27.   ["ar_offset"]=>
  28.   bool(false)
  29.   ["ar_order"]=>
  30.   bool(false)
  31.   ["ar_orderby"]=>
  32.   array(0) {
  33.   }
  34.   ["ar_set"]=>
  35.   array(0) {
  36.   }
  37.   ["ar_wherein"]=>
  38.   array(0) {
  39.   }
  40.   ["ar_aliased_tables"]=>
  41.   array(0) {
  42.   }
  43.   ["ar_store_array"]=>
  44.   array(0) {
  45.   }
  46.   ["ar_caching"]=>
  47.   bool(false)
  48.   ["ar_cache_exists"]=>
  49.   array(0) {
  50.   }
  51.   ["ar_cache_select"]=>
  52.   array(0) {
  53.   }
  54.   ["ar_cache_from"]=>
  55.   array(0) {
  56.   }
  57.   ["ar_cache_join"]=>
  58.   array(0) {
  59.   }
  60.   ["ar_cache_where"]=>
  61.   array(0) {
  62.   }
  63.   ["ar_cache_like"]=>
  64.   array(0) {
  65.   }
  66.   ["ar_cache_groupby"]=>
  67.   array(0) {
  68.   }
  69.   ["ar_cache_having"]=>
  70.   array(0) {
  71.   }
  72.   ["ar_cache_orderby"]=>
  73.   array(0) {
  74.   }
  75.   ["ar_cache_set"]=>
  76.   array(0) {
  77.   }
  78.   ["username"]=>
  79.   string(4) "root"
  80.   ["password"]=>
  81.   string(5) "mysql"
  82.   ["hostname"]=>
  83.   string(9) "localhost"
  84.   ["database"]=>
  85.   string(9) "allmybase"
  86.   ["dbdriver"]=>
  87.   string(5) "mysql"
  88.   ["dbprefix"]=>
  89.   string(0) ""
  90.   ["char_set"]=>
  91.   string(4) "utf8"
  92.   ["dbcollat"]=>
  93.   string(15) "utf8_general_ci"
  94.   ["autoinit"]=>
  95.   bool(true)
  96.   ["swap_pre"]=>
  97.   string(0) ""
  98.   ["port"]=>
  99.   string(0) ""
  100.   ["pconnect"]=>
  101.   bool(false)
  102.   ["conn_id"]=>
  103.   resource(13) of type (mysql link)
  104.   ["result_id"]=>
  105.   resource(15) of type (mysql result)
  106.   ["db_debug"]=>
  107.   bool(true)
  108.   ["benchmark"]=>
  109.   float(0.0023801326751709)
  110.   ["query_count"]=>
  111.   int(2)
  112.   ["bind_marker"]=>
  113.   string(1) "?"
  114.   ["save_queries"]=>
  115.   bool(true)
  116.   ["queries"]=>
  117.   array(2) {
  118.     [0]=>
  119.     string(60) "SELECT *
  120. FROM (`classlist`)
  121. WHERE `sitename` = 'fda'
  122. LIMIT 1"
  123.     [1]=>
  124.     string(67) "SELECT count(*) as c
  125. FROM (`base`)
  126. WHERE `url` = 'fdsafdsf'
  127. LIMIT 1"
  128.   }
  129.   ["query_times"]=>
  130.   array(2) {
  131.     [0]=>
  132.     float(0.0020830631256104)
  133.     [1]=>
  134.     float(0.00029706954956055)
  135.   }
  136.   ["data_cache"]=>
  137.   array(0) {
  138.   }
  139.   ["trans_enabled"]=>
  140.   bool(true)
  141.   ["trans_strict"]=>
  142.   bool(true)
  143.   ["_trans_depth"]=>
  144.   int(0)
  145.   ["_trans_status"]=>
  146.   bool(true)
  147.   ["cache_on"]=>
  148.   bool(false)
  149.   ["cachedir"]=>
  150.   string(0) ""
  151.   ["cache_autodel"]=>
  152.   bool(false)
  153.   ["CACHE"]=>
  154.   NULL
  155.   ["_protect_identifiers"]=>
  156.   bool(true)
  157.   ["_reserved_identifiers"]=>
  158.   array(1) {
  159.     [0]=>
  160.     string(1) "*"
  161.   }
  162.   ["stmt_id"]=>
  163.   NULL
  164.   ["curs_id"]=>
  165.   NULL
  166.   ["limit_used"]=>
  167.   NULL
  168.   ["result_array"]=>
  169.   array(0) {
  170.   }
  171.   ["result_object"]=>
  172.   array(0) {
  173.   }
  174.   ["current_row"]=>
  175.   int(0)
  176.   ["row_data"]=>
  177.   NULL
  178.   ["_escape_char"]=>
  179.   string(1) "`"
  180.   ["_like_escape_str"]=>
  181.   string(0) ""
  182.   ["_like_escape_chr"]=>
  183.   string(0) ""
  184.   ["delete_hack"]=>
  185.   bool(true)
  186.   ["_count_string"]=>
  187.   string(19) "SELECT COUNT(*) AS "
  188.   ["_random_keyword"]=>
  189.   string(7) " RAND()"
  190.   ["num_rows"]=>
  191.   int(1)
  192. }
复制代码
 楼主| 发表于 2010-10-13 15:13:55 | 显示全部楼层
现在我想不明白的就是,在query里面我的两次查询语句变成了一个数组,但我只能取到数组第一个语句的结果
发表于 2010-10-13 16:43:43 | 显示全部楼层
太长了,这种代码还不够懒惰。
 楼主| 发表于 2010-10-13 17:55:28 | 显示全部楼层
我研究了一些db类的代码 改了两个地方  在

        function result_array() 里面加上了$this->result_array = array ();
在function result_object() 加上了$this->result_object = array ();
也就是我手动在代码里面.刚加上没发现什么异常
发表于 2010-10-14 08:40:13 | 显示全部楼层
输出语句完全正常,所以不是CI的问题,有可能是楼主更改CI源码造成的

本版积分规则