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 II)

19.07.2008
X. SQLite My Fire! (partea II)

Acum, ca ne aflam asupra subiectului INSERT, iti amintesti afirmatia mea de acum cateva pagini despre faptul ca SQLite nu tine seama de tipuri si deci poti insera valori de orice tip, indiferent de camp? Mai exista o exceptie importanta de la aceasta regula: un camp care este marcat ca INTEGER PRIMARY KEY

Total vizualizari: 2919 2919 afisari   |   Comentarii  0   |   Rating   |   (2 voturi)   |   Timp necesar: 25 min 25 min   |   Nivel de cunostiinte necesar: Mediu  Mediu

Sursa:  devzone.zend.com  
Autor:  Vikram Vaswani
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1
comenteaza printeaza

Nu-i "tipul" meu

Acum, ca ne aflam asupra subiectului INSERT, iti amintesti afirmatia mea de acum cateva pagini despre faptul ca SQLite nu tine seama de tipuri si deci poti insera valori de orice tip, indiferent de camp? Mai exista o exceptie importanta de la aceasta regula: un camp care este marcat ca INTEGER PRIMARY KEY (cheie primara integer). In SQLite, campurile marcate ca INTEGER PRIMARY KEY indeplinesc doua functii importante: ele asigura un identificator numeric unic pentru fiecare inregistrare din tabel, si, daca le inserezi o valoare NULL, SQLite va insera in mod automat o valoare care este cu 1 mai mare decat cea mai mare valoare deja prezenta in campul respectiv.

Campurie INTEGER PRIMARY KEY din SQLite indeplinesc deci un rol echivalent campurilor AUTO_INCREMENT ("auto-incrementare") din MySQL, si reprezinta o modalitate convenabila de a-ti numerota in mod automat inregistrarile. Evident, nu poti insera valori non-numerice intr-un asemenea camp, si de aceea am spus ca ele constituie o exceptie de la regula de independenta fata de tip. Citeste mai mult despre acestea la http://www.sqlite.org/datatypes.html.

Din moment ce tabelul books folosit in exemplul precedent contine deja un asemenea camp, (campul id), este clar ca fiecare INSERT efectuat in acesta cu o valoare NULL pentru campul respectiv genereaza un nou numar de inregistrare. Daca ai dori sa recuperezi acest numar, PHP are o cale de a face si acest lucru - doar foloseste functia sqlite_last_insert_rowid(), care returneaza ID-ul ultimului rand inserat (echivalent functiei mysql_insert_id() din PHP MySQL API).

Pentru a observa acest lucru pe viu, actualizeaza bucla if() din mijlocul secventei de instructiuni anterioare pentru a include o apelare la sqlite_last_insert_rowid(), dupa cum urmeaza:


<?php  
 
// check to see if the form was submitted with a new record  
if (isset($_POST['submit'])) {  
    // make sure both title and author are present  
if (!empty($_POST['title']) && !empty($_POST['author'])) {  
        // generate INSERT query  
        $insQuery = "INSERT INTO books (title, author) VALUES (\"".
        sqlite_escape_string        ($_POST['title'])."\", \"".
        sqlite_escape_string($_POST['author'])."\")";  
        
        // execute query  
        $insResult = sqlite_query($handle, $insQuery) or die
        ("Error in query: ".sqlite_error_string
        (sqlite_last_error($handle)));  
        
        // print success message  
        echo "<i>Record successfully inserted with ID "
        .sqlite_last_insert_rowid($handle)."!</i><p />";  
    }  
    else {  
        // missing data  
        // display error message  
        echo "<i>Incomplete form input. Record not inserted!</i><p />";  
    }  
}  
 
?>

Daca ai nevoie, poti afla de asemenea afla cate randuri au fost afectate folosind functia sqlite_changes() -incearca si tu si vei vedea!

O luam de la capat

Iti vei aminti, de la inceputul acestui tutorial, ca ti-am sugerat sa initializezi baza de date library.db folosind programul de linii de comanda SQLite. Ei bine, asta nu e singura modalitate de a crea o baza de date SQLite noua - poti folosi chiar PHP pentru a efectua acest lucru, emitand comenzile necesare CREATE TABLE si INSERT prin intermediul functiei sqlite_query(). Iata cum:

<?php  
 
// set path of database file  
$db = $_SERVER['DOCUMENT_ROOT']."/../library2.db";  
 
// open database file  
$handle = sqlite_open($db) or die("Could not open database");  
 
// create database  
sqlite_query($handle, "CREATE TABLE books (id INTEGER PRIMARY KEY, 
title VARCHAR(255) NOT NULL, author VARCHAR(255) NOT NULL)") 
or die("Error in query: "
.sqlite_error_string(sqlite_last_error($handle)));  
 
// insert records  
sqlite_query($handle, "INSERT INTO books (title, author) VALUES 
('The Lord Of The Rings', 'J.R.R. Tolkien')") or die("Error in query:"
.sqlite_error_string(sqlite_last_error($handle)));  
 
sqlite_query($handle, "INSERT INTO books (title, author) VALUES 
('The Murders In The Rue Morgue', 'Edgar Allan Poe')") 
or die("Error in query: "
.sqlite_error_string(sqlite_last_error($handle)));  
 
sqlite_query($handle, "INSERT INTO books (title, author) VALUES 
('Three Men In A Boat', 'Jerome K. Jerome')") or die("Error in query:"
.sqlite_error_string(sqlite_last_error($handle)));  
 
sqlite_query($handle, "INSERT INTO books (title, author) VALUES 
('A Study In Scarlet', 'Arthur Conan Doyle')") or die("Error in query:"
.sqlite_error_string(sqlite_last_error($handle)));  
 
sqlite_query($handle, "INSERT INTO books (title, author) VALUES 
('Alice In Wonderland', 'Lewis Carroll')") or die("Error in query:"
.sqlite_error_string(sqlite_last_error($handle)));  
 
// print success message  
echo "<i>Database successfully initialized!";  
 
// all done  
// close database file  
sqlite_close($handle);  
 
?>

Sau, in PHP 5, poti folosi demersul cu orientare pe obiecte:

<?php  
 
// set path of database file  
$file = $_SERVER['DOCUMENT_ROOT']."/../library3.db";  
 
// create database object  
$db = new SQLiteDatabase($file) or die("Could not open database");  
 
// create database  
$db = query("CREATE TABLE books (id INTEGER PRIMARY KEY, title 
VARCHAR(255) NOT NULL, author VARCHAR(255) NOT NULL)") 
or die("Error in query");  
 
// insert records  
$db = query("INSERT INTO books (title, author) VALUES 
('The Lord Of The Rings', 'J.R.R. Tolkien')") 
or die("Error in query");  
 
$db = query("INSERT INTO books (title, author) VALUES 
('The Murders In The Rue Morgue', 'Edgar Allan Poe')") 
or die("Error in query");  
 
$db = query("INSERT INTO books (title, author) VALUES 
('Three Men In A Boat', 'Jerome K. Jerome')") 
or die("Error in query");  
 
$db = query("INSERT INTO books (title, author) VALUES 
('A Study In Scarlet', 'Arthur Conan Doyle')") 
or die("Error in query");  
 
$db = query("INSERT INTO books (title, author) VALUES 
('Alice In Wonderland', 'Lewis Carroll')") 
or die("Error in query");  
 
// print success message  
echo "<i>Database successfully initialized!";  
 
// all done  
// destroy database object  
unset($db);  
 
?>

Cateva unelte in plus

In sfarsit, SQLite API include de asemenea niste functii auxiliare, pentru a-ti furniza informatii asupra versiunii SQLite precum si a encodarii, codul de eroare si mesajul generat de ultima operatie esuata. Urmatorul exemplu face o demonstratie a functiilor sqlite_libversion() si sqlite_libencoding(), care returneaza numarul si encodarea respectiva, a versiunii bibliotecii de conectare SQLite:

<?php  
 
// version  
echo "SQLite version: ".sqlite_libversion()."<br />";  
// encoding  
echo "SQLite encoding: ".sqlite_libencoding()."<br />";  
 
?>

Cand lucrurile nu merg bine, apeleaza la functia sqlite_last_error(), care returneaza ultimul cod de eroare returnat de catre SQLite. Desigur, acest cod de eroare - o valoare numerica - nu este foarte util in sine; pentru a-l converti intr-un mesaj care sa poata fi citit de catre o persoana, cupleaza-l la functia sqlite_error_string(). Ia in considerare urmatorul exemplu, care are valoare ilustrativa, incercand sa ruleze o interogare cu o eroare voita, intentionata, in cadrul ei:

<?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 contains a deliberate error  
$query = "DELETE books WHERE id = 1";  
 
// execute query  
$result = sqlite_query($handle, $query) or die("Error in query: "
.sqlite_error_string(sqlite_last_error($handle)));  
 
// all done  
// close database file  
sqlite_close($handle);  
 
?>

Iata cum arata iesirile:

php

Ia aminte la faptul ca, desi par similare, functiile sqlite_last_error() si sqlite_error_string() nu functioneaza chiar in acelasi mod ca functiile mysql_errno() si mysql_error(). Functiile mysql_errno() si mysql_error() pot fi folosite in mod independent una fata de cealalta pentru a recupera ultimul cod de eroare si mesajul aferent, insa sqlite_error_string() este dependent de codul de eroare returnat de catre sqlite_last_error().

Daca apetitul tau abia a fost trezit, poti citi mai multe despre lucrurile pe care le poate face PHP cu SQLite in sectiunea lui Zend, PHP 5 In Depth.

Pagina:
1
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(2 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
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
4795
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4730
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4605
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4540
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4400
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Lightroom Flash CSS XHTML Dreamweaver Fotografie Outlook Photoshop Verilog RoR HTML Vista AJAX StyleSheet Sony Vegas Bridge JSON Java SWF XML Python Ruby on Rails Swift 3D SEO Word PSD Fireworks Javascript COREL DRAW Powerpoint Gimp Illustrator Action Script Excel MySQL PHP
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