Ha ha, bu da başıma geldi! Ve I've complained Bu konuda Devs için, ve onlar ignored me.
Eğer sonuç çağırdığınızda (), bu döngü her olası sonucu ile olacak ve büyük bir dahili diziye kaydını saklayın. Bkz system/database/DB_result.php
ise result_object ve sonunda (döngü) ve result_array ()
Sabitleme üç yolu vardır.
The easy way:
SQL sorgusunda LIMIT
(veya TOP
a> MSSQL) sonuçlarınız.
SELECT TOP(100) * FROM Table
The UPDATED unbuffered way:
Bu soru sorulmuştur introduced 2 yıl sonra oldu unbuffered_row()
işlevini kullanın.
$query = $this->db->query($sql);
// not $query->result() because that loads everything into an internal array.
// and not $query->first_row() because it does the same thing (as of 2013-04-02)
while ($record = $query->unbuffered_row('array')) {
// code...
}
The hard way:
(O php4 hariç çünkü Devs sevmiyorum) PHP5 yineleyicileri kullanan bir proper sonuç nesne kullanın. Lütfen DB_result.php dosyasında böyle bir şey tokat:
-class CI_DB_result {
+class CI_DB_result implements Iterator {
var $conn_id = NULL;
var $result_id = NULL;
var $result_array = array();
var $result_object = array();
- var $current_row = 0;
+ var $current_row = -1;
var $num_rows = 0;
var $row_data = NULL;
+ var $valid = FALSE;
/**
function _fetch_assoc() { return array(); }
function _fetch_object() { return array(); }
+ /**
+ * Iterator implemented functions
+ * http://us2.php.net/manual/en/class.iterator.php
+ */
+
+ /**
+ * Rewind the database back to the first record
+ *
+ */
+ function rewind()
+ {
+ if ($this->result_id !== FALSE AND $this->num_rows() != 0) {
+ $this->_data_seek(0);
+ $this->valid = TRUE;
+ $this->current_row = -1;
+ }
+ }
+
+ /**
+ * Return the current row record.
+ *
+ */
+ function current()
+ {
+ if ($this->current_row == -1) {
+ $this->next();
+ }
+ return $this->row_data;
+ }
+
+ /**
+ * The current row number from the result
+ *
+ */
+ function key()
+ {
+ return $this->current_row;
+ }
+
+ /**
+ * Go to the next result.
+ *
+ */
+ function next()
+ {
+ $this->row_data = $this->_fetch_object();
+ if ($this->row_data) {
+ $this->current_row++;
+ if (!$this->valid)
+ $this->valid = TRUE;
+ return TRUE;
+ } else {
+ $this->valid = FALSE;
+ return FALSE;
+ }
+ }
+
+ /**
+ * Is the current_row really a record?
+ *
+ */
+ function valid()
+ {
+ return $this->valid;
+ }
+
}
// END DB_result class
Sonra yerine $query->result()
Eğer $query
gibi ucunda ->result()
olmadan sadece nesneyi kullanmak çağırmak, kullanmak için. Ve tüm iç CI şeyler hala result()
ile çalışır.
$query = $this->db->query($sql);
foreach ($query as $record) { // not $query->result() because that loads everything into an internal array.
// code...
}
Bu arada, kendi koduyla çalışma benim Iterator kod bütün -1 şeyle bazı mantık sorunları var, bu yüzden aynı nesne üzerinde iki $query->result()
ve $query
kullanmayın. Birisi bunu düzeltmek istiyorsa, sen harika.