Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [kohana]Prepared statements? Obsługa db.
Forum PHP.pl > Forum > PHP > Frameworki
krzywy36
Zaczynam dopiero pracę z kohaną i jest to mój pierwszy fw więc proszę o wyrozumiałość.
Mam Klase Model_News dziedziczącą po Kohana_Model, chcę wykonać zapytanie do bazy używając prepared statements, ale nie bardzo wiem jak się za to zabrać:
  1. $query = $this->_db->query(DATABASE::SELECT, $sql, false)->param(':id', $id)->as_array();

powyższy kod zwraca błąd ze składnią SQL
  1. SELECT * FROM news WHERE news_id = :id

Co robię źle?
MickDev
Jak dokładnie wygląda ten błąd ?
krzywy36
http://screenshooter.net/1283602/mkgorah
MickDev
Pokaż cały kod, będzie jaśniejsza sytuacja
krzywy36
Problem tkwi w tym że nie wiem jak konstruować poprawnie Prepared Statements (tak myśle) robiłem to na podstawie któregoś tutoriala ale nie chce działać ;/
  1. <?php
  2. defined('SYSPATH') or die('No direct script access.');
  3. class Model_News extends Kohana_Model
  4. {
  5. public function get_all_news($limit = 5)
  6. {
  7. $sql = "SELECT * FROM news ORDER BY news_date";
  8.  
  9. return $this->_db->query(DATABASE::SELECT, $sql, false)->as_array();
  10. }
  11. public function get_single_news($id)
  12. {
  13. $sql = "SELECT * FROM news WHERE news_id = :id";
  14. $query = $this->_db->query(DATABASE::SELECT, $sql, false)->param(':id', $id)->as_array();
  15.  
  16. }
  17. }
  18. ?>
MickDev
A o jakiej wersji Kohany mowa ?
krzywy36
3.0.9
MickDev
Z tego co widzę to w funkcji get_single_news() nie zwracasz wyników.
krzywy36
ta funkcja nie jest skończona ale nie w tym problem.
Wie ktoś jak używać prepared statements w kohanie 3?
MickDev
Tutaj masz guide'a:
http://kohanaframework.org/guide/database/query/prepared
krzywy36
ok, więc taki kod:
  1. $query = DB::query(DATABASE::SELECT, $sql, false)->param(':id', $id)->execute()->as_array();

się wykonuje, ale taki:
  1. $query = $this->_db->query(DATABASE::SELECT, $sql, false)->param(':id', $id)->as_array();

już nie.
Pytanie, dlaczego miałbym używać metod statycznych klasy DB skoro w modelu mam "wbudowany" obiekt tej klasy (zgaduje, że tej)
Czego w końcu używać i jeśli metod statycznych to po co _db w modelu?
MickDev
w 2 przypadku nie trzeba używać execute() ?
krzywy36
funkcja (kilka postów wyżej) get_all_news działa bez execute.
Niezaleznie od tego czy dam execute czy nie, wywala błąd ze składnią SQL.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.