Generowanie wyników zapytań
Jest kilka sposobów na generowanie wyników zapytań:
result()
Ta funkcjia zwraca wynik zapytania jako tablicę obiektów lub pustą tablicę przy niepowodzeniu. Zazwyczaj będziesz używał tej funkcji w pętli foreach, w ten sposób:
$query = $this->db->query("TWOJE ZAPYTANIE");
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
Powyższa funkcja jest aliasem funkcji result_object().
Jeśli wykonujesz zapytanie, które może nie zwrócić żadnego wyniku, możesz sprawdzić, czy taki wynik istnieje:
$query = $this->db->query("TWOJE ZAPYTANIE");
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
}
Możesz również przypisać ciąg znaków do funkcji result(), który będzie reprezentował instancję klasy dla każdego obiektu wyniku (uwaga: klasa ta musi być załadowana)
$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $row)
{
echo $row->name; // wywołanie atrybutu
echo $row->reverse_name(); // lub metody zdefiniowanej w klasie 'User'
}
result_array()
Ta funkcja zwraca wynik jako tablicę lub pustą tablicę, jeśli zapytanie nie będzie miało wyników. Zazwyczaj będziesz używał tej funkcji w pętli foreach, w ten sposób:
$query = $this->db->query("TWOJE ZAPYTANIE");
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
row()
Ta funkcja zwraca pojedynczy rezultat. Jeśli Twoje zapytanie ma więcej niż jeden wynik, zwrócony zostanie jedynie pierwszy wynik. Wynik jest zwracany jako obiekt. Oto przykład:
$query = $this->db->query("TWOJE ZAPYTANIE");
if ($query->num_rows() > 0)
{
$row = $query->row();
echo $row->title;
echo $row->name;
echo $row->body;
}
Jeśli chcesz określić, który wynik ma zostać zwrócony, możesz przypisać numer wiersza jako pierwszy parametr metody:
$row = $query->row(5);
Możesz również dodać drugi parametr jako ciąg znaków, który będzie nazwą klasy, której instancją ma być dany wiersz:
$query = $this->db->query("SELECT * FROM users LIMIT 1;");
$query->row(0, 'User')
echo $row->name; // wywołanie atrybutu
echo $row->reverse_name(); // lub metody zdefiniowanej w klasie 'User'
row_array()
Tak samo jak powyżej, działa funkcja row() - wyjątkiem jest jedynie to, że zwraca tablicę. Przykład:
$query = $this->db->query("TWOJE ZAPYTANIE");
if ($query->num_rows() > 0)
{
$row = $query->row_array();
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
Jeśli chcesz aby został zwrócony konkretny wynik, możesz przypisać numer tego wyniku do pierwszego parametru:
$row = $query->row_array(5);
Ponadto, możesz poruszać się po wynikach do przodu/do tyłu/do pierwszego wyniku/do ostatniego wyniku, używając tych funkcji:
$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()
Domyślnie, powyższe funkcje zwracają obiekt, chyba że użyjemy słowa "array" jako parametr:
$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')
Funkcje pomocnicze wyników
$query->num_rows()
Zwraca liczbę wyników dla zapytania. Uwaga: W tym przykładzie $query jest zmienną, do której przypisany jest wynik zapytania:
$query = $this->db->query('SELECT * FROM mojatabela');
echo $query->num_rows();
$query->num_fields()
Liczba KOLUMN (pól) zwróconych przez zapytanie. Upewnij się, że wywołujesz tę funkcję używając wyniku zapytania:
$query = $this->db->query('SELECT * FROM mojatabela');
echo $query->num_fields();
$query->free_result()
Zwalnia pamięć powiązaną z wynikiem i usuwa ID zasobu. PHP normalnie uwalnia pamięć automatycznie na końcu wykonywania skryptu. Jeśli jednak uruchamiasz wiele zapytań w jednym skrypcie, możesz chcieć uwolnić pamięć po każdym wyniku zapytania, które zostało wysłane - co przełoży się na zmiejszenie zużycia pamięci. Przykład:
$query = $this->db->query('SELECT title FROM mojatabela');
foreach ($query->result() as $row)
{
echo $row->title;
}
$query->free_result(); // Wyniki obiektu $query nie będą już dostępne
$query2 = $this->db->query('SELECT name FROM jakastabela');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // Wyniki obiektu $query2 nie będą już dostępne