E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Introducere in PHP (24)

X. SQLite My Fire! (partea I)

16.07.2008
X. SQLite My Fire! (partea I)

Spre deosebire de MySQL, care opereaza pe modelul server client, SQLite este un motor de baze de date bazat pe fisiere si foloseste functii fisier I/O (input/output- intrare/iesire) pentru a stoca si pentru a citi bazele de date din fisiere de pe disk.

Total vizualizari: 7606 7606 afisari   |   Comentarii  2   |   Rating   |   (2 voturi)   |   Timp necesar: 30 min 30 min   |   Nivel de cunostiinte necesar: Mediu  Mediu

Sursa:  Devzone.zend.com  
Autor:  Vikram Vaswani
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 123 4
comenteaza printeaza

Diferite lovituri

Ca si in cazul lui MySQL API, PHP's SQLite API iti ofera mai multe metode de a a ajunge la un rezultat. De exemplu, poti recupera acelasi rand ca obiect cu metoda sqlite_fetch_object() , si accesa valorile campurilor folosind numele campurilor ca proprietati ale obiectelor. Iata un exemplu:

<html> 
<head></head> 
<body> 
<?php 
// set path of database file 
$db = $_SERVER['DOCUMENT_ROOT']."/../library.db"; 
 
// open database file 
$handle = sqlite_open($db) 
or die("Could not open database"); 
 
// generate query string 
$query = "SELECT * FROM books"; 
 
// execute query 
$result = sqlite_query($handle, $query) or die("Error in query: 
".sqlite_error_string(sqlite_last_error($handle))); 
 
// if rows exist 
if (sqlite_num_rows($result) > 0) { 
    // get each row as an object 
    // print field values as object properties 
    echo "<table cellpadding=10 border=1>"; 
    while($obj = sqlite_fetch_object($result)) { 
        echo "<tr>"; 
        echo "<td>".$obj->id."</td>"; 
        echo "<td>".$obj->title."</td>"; 
        echo "<td>".$obj->author."</td>"; 
        echo "</tr>"; 
    } 
    echo "</table>"; 
} 
 
// all done 
// close database file 
sqlite_close($handle); 
?> 
</body> 
</html>

O alta optiune este aceea de a recupera setul complet de rezultate dintr-o lovitura cu functia sqlite_fetch_all(). Aceasta functie recupereaza setul complet de inregistrari ca o matrice de matrice; fiecare element al matricei exterioare reprezinta o inregistrare, si este ea insasi structurata ca o matrice ale carei elemente sunt campuri in acea inregistrare.

Iata un exemplu care ar putea sa va clarifice acest aspect:

<html> 
<head></head> 
<body> 
<?php 
// set path of database file 
$db = $_SERVER['DOCUMENT_ROOT']."/../library.db"; 
 
// open database file 
$handle = sqlite_open($db) or die("Could not open database"); 
 
// generate query string 
$query = "SELECT * FROM books"; 
 
// execute query 
$result = sqlite_query($handle, $query) or die("Error in query: 
".sqlite_error_string(sqlite_last_error($handle))); 
 
// get the complete result set as a series of nested arrays 
$data = sqlite_fetch_all($result); 
 
// all done 
// close database file 
sqlite_close($handle); 
 
// check the array to see if it contains at least one record 
if (sizeof($data) > 0) { 
    echo "<table cellpadding=10 border=1>"; 
    // iterate over outer array (rows) 
    // print values for each element of inner array (columns) 
    foreach ($data as $row) { 
        echo "<tr>"; 
        echo "<td>".$row[0]."</td>"; 
        echo "<td>".$row[1]."</td>"; 
        echo "<td>".$row[2]."</td>"; 
        echo "</tr>"; 
    } 
    echo "</table>"; 
} 
?> 
</body> 
</html>

In toate exemplele de mai sus, baza de date a ramas deschisa in timp ce setul de rezultate a fost procesat, din cauza ca inregistrarile au fost recuperate una dupa alta cu functiile sqlite_fetch_array() sau sqlite_fetch_object(). Exemplul de mai sus este unic, in aceea ca baza de date poate fi inchisa inainte ca matricea cu setul de rezultate sa fie procesat. Acest lucru se intampla din cauza ca intregul set de rezultate este recuperat deodata si stocat in matricea $data , asa ca nu este deloc nevoie sa lasi baza de date deschisa pe parcursul procesarii ei.

Daca setul de rezultate contine un singur camp, foloseste functia sqlite_fetch_single()function, care recupereaza valoarea celui dintai camp dintr-un rand. Manualul PHP o exprima cel mai bine, atunci cand spune "aceasta este cea mai optima cale de a recupera date atunci cand esti interesat numai de valorile dintr-o singura coloana de date". Arunca o privire:

<html> 
<head></head> 
<body> 
<?php 
// set path of database file 
$db = $_SERVER['DOCUMENT_ROOT']."/../library.db"; 
 
// open database file 
$handle = sqlite_open($db) 
or die("Could not open database"); 
 
// generate query string 
// this query returns only a single 
// record with a single field 
$query = "SELECT author FROM books 
WHERE title = 'A Study In Scarlet'"; 
 
// execute query 
$result = sqlite_query($handle, $query) or die("Error in query: 
".sqlite_error_string(sqlite_last_error($handle))); 
 
// if a row exists 
if (sqlite_num_rows($result) > 0) { 
    // get the value of the first field 
    // of the first row 
    echo sqlite_fetch_single($result); 
} 
 
// all done 
// close database file 
sqlite_close($handle); 
?> 
</body> 
</html>

Chiar poti folosi functia sqlite_fetch_single() in combinatie cu o bucla while() pentru a reitera un set de rezulate continand mai multe inregistrari, insa un singur camp. Observa si modul in care eu am folosit functia sqlite_has_more(), pentru a verifica daca urmatorul rand exista sau nu.

<html> 
<head></head> 
<body> 
<?php 
// set path of database file 
$db = $_SERVER['DOCUMENT_ROOT']."/../library.db"; 
 
// open database file 
$handle = sqlite_open($db) or die("Could not open database"); 
 
// generate query string 
$query = "SELECT DISTINCT author FROM books"; 
 
// execute query 
$result = sqlite_query($handle, $query) or die("Error in query: 
".sqlite_error_string(sqlite_last_error($handle))); 
 
// if rows exist 
if (sqlite_num_rows($result) > 0) { 
    echo "<table cellpadding=10 border=1>"; 
    // check for more rows 
    while (sqlite_has_more($result)) { 
        // get first field from each row 
        // print values 
        $row = sqlite_fetch_single($result); 
        echo "<tr>"; 
        echo "<td>".$row."</td>"; 
        echo "</tr>"; 
    } 
    echo "</table>"; 
} 
 
// all done 
// close database file 
sqlite_close($handle); 
?> 
</body> 
</html>

Desigur, poti face acelasi lucru folosind notatia pe obiecte in PHP 5. Totusi, trebuie sa stii ca sqlite_has_more() este o functie care chiar nu se transpune in numele metodei sale obiect; intr-o secventa de instructiuni OO, ai avea nevoie sa o numesti $result->valid();.

Aceasta secventa este echivalentul OO al celei de mai sus:

<html> 
<head></head> 
<body> 
<?php 
// set path of database file 
$file = $_SERVER['DOCUMENT_ROOT']."/../library.db"; 
 
// create database object 
$db = new SQLiteDatabase($file) 
or die("Could not open database"); 
 
// generate query string 
$query = "SELECT DISTINCT author FROM books"; 
 
// execute query 
$result = $db->query($query) or die("Error in query"); 
 
// if rows exist 
if ($result->numRows() > 0) { 
    echo "<table cellpadding=10 border=1>"; 
    // check for more rows 
    while ($result->valid()) { 
        // get first field from each row 
        // print values 
        $row = $result->fetchSingle(); 
        echo "<tr>"; 
        echo "<td>".$row."</td>";     
        echo "</tr>"; 
    } 
    echo "</table>"; 
} 
 
// all done 
// destroy database object 
unset($db); 
?> 
</body> 
</html>
Pagina:
« 123 4
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(2 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (2) spune-ti parerea
Mark , Joi, 17 Iulie 2008
#2

Am auzit ca SQLite este cam slabut pentru query-uri complexe, pe mai multe tabele, e adevarat? S-ar potrivi cu numele ...

Raporteaza acest comentariu ca injurios!
Darude , Miercuri, 16 Iulie 2008
#1

Oh, de cand asteptam un nou material PHP :) cu atat mai bine este cu SQLite.

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4320
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4190
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4170
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4010
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Dreamweaver CSS AJAX PSD Ruby on Rails Gimp Java Vista Photoshop Illustrator RoR Fotografie COREL DRAW Swift 3D XML Python Action Script Javascript XHTML Excel Sony Vegas Bridge Powerpoint Outlook JSON PHP Flash StyleSheet SEO Verilog Word Fireworks MySQL Lightroom SWF HTML
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software