Podręcznik użytkownika CodeIgniter wersja 2.2.1


Zapytania

$this->db->query();

Aby wysłac zapytanie, użyj następującej funkcji:

$this->db->query('TWOJE ZAPYTANIE');

Funkcja query() zwraca wynik z bazy danych. Funkcja zwraca obiekt, kiedy wykonywane są zapytania o typie "odczytu", których można użyć do pokazywania wyników. Kiedy wykonywane są zapytania o typie "zapisu", zwracane jest wartość TRUE lub FALSE w zależności od tego, czy zapytanie zakończyło się sukcesem, czy też nie. Przy pobieraniu danych, zazwyczaj będziesz przypisywał zapytanie do własnej zmiennej, w taki sposób:

$query = $this->db->query('TWOJE ZAPYTANIE');

$this->db->simple_query();

Jest to uproszczona wersja funkcji $this->db->query(). Zwraca ona TYLKO wynik TRUE/FALSE - w zależności od sukcesu lub porażki. Ta funkcja NIE ZWRACA wyniku zapytania, nie ustawia czasu wykonywania zapytania, nie kompiluje danych do bindowania, ani nie przechowuje zapytań do debugowania. Funkcja ta po prostu wysyła zapytanie. Większość użytkowników, będzie bardzo rzadko używać tej funkcji.

Manualna praca z prefixami bazy danych

Jeśli skonfigurowałeś prefix dla bazy danych i chciałbyś np. poprzedzić nim nazwę tabeli podczas wykonywania zwykłego zapytania SQL, możesz zrobić tak:

$this->db->dbprefix('nazwatabeli');
// zwraca prefix_nazwatabeli

Jeśli z jakichś powodów chciałbyś zmienić prefix programowo, bez potrzeby tworzenia nowego połączenia, możesz użyć tej metody:

$this->db->set_dbprefix('nowyprefix');

$this->db->dbprefix('nazwatabeli');
// zwraca nowyprefix_nazwatabeli

Protecting identifiers

In many databases it is advisable to protect table and field names - for example with backticks in MySQL. Active Record queries are automatically protected, however if you need to manually protect an identifier you can use:

$this->db->protect_identifiers('table_name');

This function will also add a table prefix to your table, assuming you have a prefix specified in your database config file. To enable the prefixing set TRUE (boolen) via the second parameter:

$this->db->protect_identifiers('table_name', TRUE);

Escapowanie zapytań

Bardzo dobrą praktyką, związaną z bezpieczeństwem jest escapowanie danych przed ich wysłaniem do bazy danych. CodeIgniter posiada trzy metody, które mogą w tym pomóc:

  1. $this->db->escape() Ta funkcja określa typ danych, dlatego może być używana tylko do escapowania ciągu znaków. Automatycznie dodaje również pojedyncze apostrofy wokół ciągu znaków, dlatego nie ma potrzeby robić tego samodzielnie: $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
  2. $this->db->escape_str() Ta funkcja escapuje dane niezależnie od ich typu. W większości przypadków będziesz używał powyższej funkcji, a nie tej. Używamy jej w ten sposób: $sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
  3. $this->db->escape_like_str() Ta metoda powinna być używana, kiedy ciągi mają zostać użyte w połączeniu z warunkiem LIKE, tak aby wzorce dla tego warunku ('%', '_'), również były poprawnie escapowane. $search = '20% raise';
    $sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";

Bindowanie zapytań

Bindowanie umożliwia uproszczenie składni zapytań, poprzez przekazanie odpowiedzialności za złożenie zapytania na system. Spójrzmy na następujący przykład:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql, array(3, 'live', 'Rick'));

Znaki zapytania w zapytaniu są automatycznie zastąpione wartościami z tablicy z drugiego parametru funkcji query.

Kolejną korzyścią płynącą z używania bindowania, jest to że przypisane wartości są automatycznie escapowane, co w rezultacie daje bezpieczniejsze zapytanie. Nie trzeba wtedy pamiętać, aby ręcznie escapować dane, ponieważ system robi to za nas.