Heim >Backend-Entwicklung >PHP-Tutorial >Problem mit count_all_results() im Codeigniter

Problem mit count_all_results() im Codeigniter

WBOY
WBOYOriginal
2016-08-08 09:26:502579Durchsuche

Die SQL-Anweisung sieht so aus:

<span>    $this</span><span>-></span><span>db</span><span>-></span><span>select</span><span>(</span><span>'*'</span><span>)-></span><span>from</span><span>(</span><span>'mytable'</span><span>)</span><span>; </span>

<span>    $count </span><span>= </span><span>$this</span><span>-></span><span>db</span><span>-></span><span>count_all_results</span><span>() ;</span>

       $config = array(<br>            'base_url' => '/financing/dayconsumption',<br>            'total_items' => $count,<br>            'current_page' => $page,<br>            'items_per_page' => $this->pagesize,<br>        );<br>        $this->pagination2->init($config);<br>        $this->db->limit($this->pagesize, $this->pagination2->sql_offset);<br>        $query = $this->db->get();

. . . . . .

Nach der Ausführung wurde ein Fehler gemeldet:

Ein Datenbankfehler ist aufgetreten

Fehlernummer: 1096

Keine Tabellen verwendet

SELECT * LIMIT 20

Zeilennummer: 330

Nach dem Debuggen habe ich das Problem gefunden: <span>$count </span><span>= </span><span>$this</span><span>-></span><span>db</span><span>-></span><span>count_all_results</span><span>() ;</span>Überprüfen Sie hier den Quellcode von count_all_results():

        /**
	 * "Count All Results" query
	 *
	 * Generates a platform-specific query string that counts all records
	 * returned by an Active Record query.
	 *
	 * @param	string
	 * @return	string
	 */
	public function count_all_results($table = '')
	{
		if ($table != '')
		{
			$this->_track_aliases($table);
			$this->from($table);
		}

		$sql = $this->_compile_select($this->_count_string . $this->_protect_identifiers('numrows'));

		$query = $this->query($sql);
		$this->_reset_select();  //注意这里

		if ($query->num_rows() == 0)
		{
			return 0;
		}

		$row = $query->row();
		return (int) $row->numrows;
	}

Die Methode _reset_select() wird in der Methode aufgerufen und verfolgt weiterhin die Methode _reset_select():

        /**
	 * Resets the active record values.  Called by the get() function
	 *
	 * @return	void
	 */
	protected function _reset_select()
	{
		$ar_reset_items = array(
			'ar_select'			=> array(),
			'ar_from'			=> array(),
			'ar_join'			=> array(),
			'ar_where'			=> array(),
			'ar_like'			=> array(),
			'ar_groupby'		=> array(),
			'ar_having'			=> array(),
			'ar_orderby'		=> array(),
			'ar_wherein'		=> array(),
			'ar_aliased_tables'	=> array(),
			'ar_no_escape'		=> array(),
			'ar_distinct'		=> FALSE,
			'ar_limit'			=> FALSE,
			'ar_offset'			=> FALSE,
			'ar_order'			=> FALSE,
		);

		$this->_reset_run($ar_reset_items);
	}

Tatsächlich können Sie es erraten, indem Sie sich die Kommentare hier ansehen. Der aktive Datensatz wurde zurückgesetzt. Zur Bestätigung fahren Sie mit der Verfolgung von _reset_run() direkt über _reset_select() fort:

/**
	 * Resets the active record values.  Called by the get() function
	 *
	 * @param	array	An array of fields to reset
	 * @return	void
	 */
	protected function _reset_run($ar_reset_items)
	{
		foreach ($ar_reset_items as $item => $default_value)
		{
			if ( ! in_array($item, $this->ar_store_array))
			{
				$this->$item = $default_value;
			}
		}
	}

Natürlich wird der aktive Datensatz zurückgesetzt! ! Ich kenne den Grund. Nach dem Aufruf von count_all_results() wird der aktive Datensatz zurückgesetzt und die nachfolgende $query kann die Daten nicht abrufen. Die Lösung:

$this->db->start_cache();
$this->db->select('*')->from('mytable');
$this->db->stop_cache();
......
$query = $this->db->get();
$items = $query->result();
$this->db->flush_cache();

Das Obige stellt das count_all_results()-Problem in Codeigniter vor, einschließlich des relevanten Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn