Interogarea bazelor de date se face cu ajutorul modelelor. Pornesc de la ideea că aveţi deja instalat CodeIgniter 2.x. Voi oferi de asemenea un controller si un view ca sa va faceti o idee cu privire la vizualizarea rezultatului.
Asadar, este necesară realizarea unui model (tabela am numit-o “useri”):
<?php class Useri_model extends CI_Model { /* vom folosi functia preiaDate */ function preiaDate() { /* toate interogarile bazei de date, despre care voi scrie mai jos, vor fi scrise aici */ /* sfarsitul interogarilor. preluarea standard a rezultatelor si inmagazinarea acesteia */ if($q->num_rows() > 0) { foreach ($q->result() as $row) { $data[] = $row; } return $data; } } }
Acum, urmeaza alternativele pentru interogari. Prima si cea mai simpla interogare este:
$q = $this->db->query(“SELECT * FROM useri WHERE id=7 AND usr_mail = ‘mailulmeu@mail.ro'”);
O a doua metoda care previne sql injection este:
$sql = “SELECT usr_name FROM useri WHERE id = ? AND usr_mail = ?”;
$q = $this->db->query($sql, array(7,”arcu.ac@quis.edu”));
O altă metodă consta in folosirea Active Record a clasei Database:
$q = $this->db->get(“test”); /* daca doresti sa preiei toate datele din tabel */
De asemenea, daca doriesti sa preiei doar anumite campuri:
$this->db->select(“usr_name, usr_mail”);
$q = $this->db->get(“test”);
Si daca doresti sa stabilesti parametri suplimentari:
$this->db->select(“usr_name, usr_mail”);
$this->db->from(“test”);
$this->db->where(“id”, 1);
$q = $this->db->get();
Prin urmare, useri_model.php (care va fi salvat in folderul models din application) va arata cam asa…
<?php class Useri_model extends CI_Model { /* vom folosi functia preiaDate */ function preiaDate() { /* toate interogarile bazei de date, despre care voi scrie mai jos, vor fi scrise aici */ $this->db->select("usr_name, usr_mail"); $this->db->from("test"); $this->db->where("id", 7); $this->db->where("usr_mail","mailulmeu@mail.ro"); $q = $this->db->get(); /* sfarsitul interogarilor. preluarea standard a rezultatelor si inmagazinarea acesteia */ if($q->num_rows() > 0) { foreach ($q->result() as $row) { $data[] = $row; } return $data; } } }
Vom realiza şi controller şi view pentru a vedea rezultatele muncii:
<?php if(!defined("BASEPATH")) exit("No direct script access allowed"); class Useri extends CI_Controller { public function index() { $data[]= array(); $this->load->model("useri_model"); // incarcam modelul pe care l-am salvat anterior ca useri_model.php in folderul models din application $data["datepreluate"]=$this->useri_model->preiaDate(); // incarcam rezultatul intr-un array $data avand cheia datepreluate $this->load->view("useri_view",$data);// cerem view-ul care va afisa pagina in browser. Acesta este salvat ca useri_view.php in folderul views din application } }
Iar useri_view.php (pe care il vei salva in folderul views din application) va arata cam asa:
<html> <head> <title>Preluarea datelor</title> </head> <body> <h1>Preluarea datelor</h1> <ul> <?php foreach($datepreluate as $user) // preluam rezultatele din controller prin folosirea elementului cu cheia $datepreluate din array-ul $data. Acest element este tot un array { echo "<li>Nume: ".$user->usr_name."; Email: ".$user->usr_mail."</li>"; } ?> </ul> </body> </html>
Sper ca nu mi-a scapat vreo eroare…
Este foarte bun tutorialul sincer pentru mine ca incepator totul este foarte bine relatat de la interogarea bazei de date pana la preluarea datelor si afisarea lor si cel mai mult imi place ca ai respectat regurile mvc ,
in controller se fac legaturile in modul se face calculele etc. iar in view se afiseaza rezultatul .Si +
ca codul nu e dezordonat din pacate intalnit cam des in alte tutoriale .Foarte bun
In model nu se fac calculele. In model se fac doar interogarile bazei de date si se returneaza controllerului informatia. In controller se preiau informatii externe, se fac calcule cu acestea, dupa care fie se interactioneaza cu modelele pentru a prelua informatii interne fie se trimite direct rezultatul in view. Cel putin asa am inteles eu… 🙂 Multumesc pentru comentariu. Este bine ca din cand in cand sa mai primesc astfel de informatii. Asa imi dau seama ca munca nu este in zadar. 🙂 Daca nu intelegi ceva sau vrei sa afli despre altceva astept oricand sa imi scrii un rand. 🙂
$this->load->model(“useri_model”);
$data[“datepreluate”]=$this->date_model->preiaDate();
daca te uiti putin peste acest cod vei observa o greseala date_model cum date_model daca ai useri_model ai facut intentionat greseala sau e vb de alceva
Intr-adevar, aici am gresit. Am corectat acum codul. Multumesc pentru observatie. Cu ocazia asta am observat si ca mai sus am numit clasa modelului ‘useri_model.php’ ca ‘Users_model’, ceea ce ar fi dat o eroare cat mine de mare. Am corectat si acolo.