CodeIgniter nie obsługuje przygotowanych oświadczeń. Jeśli spojrzysz na kod źródłowy klasy Database CI, zobaczysz, że rozwiązywają one powiązania po prostu zastępując znaki zapytania danymi z przekazanej tablicy:
Obsługują one tylko powiązanie zapytań z nienazwanymi symbolami zastępczymi. Zobacz http://ellislab.com/codeigniter/user-guide/database/ zapytania.html
Powiązania zapytań
Wiązania umożliwiają uproszczenie składni zapytań, umożliwiając systemowi składanie zapytań za Ciebie. Rozważ 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ępowane wartościami w tablicy w drugim parametrze funkcji zapytania.
i http://ellislab.com/forums/viewthread/105112/#528915
Mimo że CI nie obsługuje przygotowanych instrukcji, obsługuje powiązania zapytań. Przy przygotowanych instrukcjach musisz wywołać pewien rodzaj funkcji Prepare(), a następnie funkcję execute(). W przypadku powiązań zapytań wystarczy wywołać tylko jedną funkcję, która w zasadzie robi to samo. Z tego powodu wiązania zapytań podobają mi się bardziej niż gotowe instrukcje.
Na marginesie, zmiana ?
do :foo
zmienia się jedynie z nienazwanych na nazwane powiązania (których CI najwyraźniej również nie obsługuje). Tylko dlatego, że używasz jednego lub nie, oznacza to, że przygotowujesz oświadczenia.