数据库连续查询出错的问题
$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 ();
我这么执行完了以后,两个结果都是一样的,都是第一次查询的结果,也就是第二次的结果没了.
大家遇到过这个问题吗,都怎么解决的. 来个人说一下好吧,我可不想每次用的时候都初始化数据库啊. 我在第二次查询的时候打印$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: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是怎么设置和连接的吧 我是把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)
} 现在我想不明白的就是,在query里面我的两次查询语句变成了一个数组,但我只能取到数组第一个语句的结果 太长了,这种代码还不够懒惰。 我研究了一些db类的代码 改了两个地方在
function result_array() 里面加上了$this->result_array = array ();
在function result_object() 加上了$this->result_object = array ();
也就是我手动在代码里面.刚加上没发现什么异常 输出语句完全正常,所以不是CI的问题,有可能是楼主更改CI源码造成的
页:
[1]