Created
October 31, 2017 11:28
-
-
Save csteri/695d7d68b496ae0b659dc10c1ad7fe6d to your computer and use it in GitHub Desktop.
PDO PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Datele de conectare (adresa_server, baza_de_date, nume si parola) | |
$hostdb = 'localhost'; | |
$namedb = 'teste'; | |
$userdb = 'username'; | |
$passdb = 'password'; | |
try { | |
// Conectare si creare obiect PDO | |
$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); | |
//Prin "exec("SET CHARACTER SET utf8")" seteaza ca transferul de date dintre PHP si serverul MySQL sa se faca in format de caractere UTF-8. Este indicata adaugarea acestei instructiuni cand se lucreaza cu date ce contin diacritice si caractere mai putin uzuale, dar in scriptul PHP trebuie aplicat si header-ul header('Content-type: text/html; charset=utf-8');. | |
$dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 | |
// Seteaza ca numele coloanelor sa fie returnat cu litere mici | |
$dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER); | |
//............CREATE............// | |
// Creare tabel | |
$sql = "CREATE TABLE `sites` (`id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY , `nume` varchar(70) NOT NULL DEFAULT '', `categorie` varchar(25), `adresa` varchar(100)) CHARACTER SET utf8 COLLATE utf8_general_ci"; | |
if($dbh->exec($sql) !== false) echo 'Tabelul sites e creat'; // Daca rezultatul e diferit de false, afiseaza confirmare | |
//....END CREATE....// | |
//............INSERT............// | |
// Adaugare date | |
$sql = "INSERT INTO `sites` (`nume`, `categorie`, `adresa`) | |
VALUES | |
('Cursuri - Tutoriale', 'educatie', 'www.marplo.net'), | |
('Curs PHP-MySQL', 'programare', 'www.marplo.net/php-mysql'), | |
('Cursuri Engleza', 'limbi straine', 'www.marplo.net/engleza')"; | |
$count = $dbh->exec($sql); | |
//............END INSERT............// | |
//............UPDATE............// | |
// Modificare date din coloanele "nume" si "adresa", unde id=3 | |
$sql = "UPDATE `sites` SET `nume`='Cursuri Spaniola', `adresa`='www.marplo.net/spaniola' WHERE `id`=3"; | |
$count = $dbh->exec($sql); | |
//............END UPDATE............// | |
//............DELETE............// | |
// Stergere randuri in functie de campul "categorie" | |
$sql = "DELETE FROM `sites` WHERE `categorie` IN('educatie', 'programare')"; | |
$count = $dbh->exec($sql); | |
//............END DELETE............// | |
//............SELECT METODA query()............// | |
// Selectare date | |
$sql = "SELECT * FROM `sites` WHERE `id` IN (1, 3)"; | |
$datas = $dbh->query($sql); | |
// Daca select-ul e facut cu succes ($datas nu e false) | |
if($datas !== false) { | |
$cols = $datas->columnCount(); // Numar coloane returnate | |
echo 'Nr. coloane returnate: '. $cols. '<br />'; | |
// Se parcurg si afiseaza datele selectate | |
foreach($datas as $row) { | |
echo $row['id']. ' - '. $row['nume']. ' - '. $row['categorie']. ' - '. $row['adresa']. '<br />'; | |
} | |
//............END SELECT METODA query()............// | |
//............SELECT METODA fetch()............// | |
//Daca metoda fetch() este apelata fara argumente si la "query()" nu e specificat vreun tip FETCH_, modul implicit (default) este PDO::FETCH_BOTH. | |
//O alta metoda prin care se poate seta modul FETCH_ default este setFetchMode(). | |
//$datas = $dbh->query($sql); | |
//$datas->setFetchMode (PDO::FETCH_OBJ); | |
//while($row = $datas->fetch()) { // ... } | |
//fetch() returneaza fiecare rand, unul dupa altul, sau FALSE cand nu mai sunt randuri. Cu aceasta metoda se poate determina modul in care sunt preluate datele. | |
//fetch() poate primi optional un argument prin care se determina modul in care valorile sunt returnate: Array, Obiect, Sir, .... | |
//Acest argument este o constanta care se aplica cu sintaxa: PDO::FETCH_MOD, | |
//............PDO::FETCH_ASSOC............// | |
// - Returneaza fiecare rand ca un Array in care cheile sunt numele coloanelor (similar cu mysql_fetch_assoc). | |
// Selectare date din MySQL si parcurgerea lor cu while | |
$sql = "SELECT * FROM `sites`"; | |
$datas = $dbh->query($sql); | |
// Se parcurg datele si le afiseaza | |
while($row = $datas->fetch(PDO::FETCH_ASSOC)) { | |
echo $row['id']. ' - '. $row['nume']. ' - '. $row['categorie']. ' - '. $row['adresa']. '<br />'; | |
} | |
// END parcuregere date cu while | |
//Selectare date din MySQL si parcurgerea lor cu foreach | |
// Selecteaza primul rand | |
$sql = "SELECT * FROM `sites` LIMIT 1"; | |
$datas = $dbh->query($sql)->fetch(PDO::FETCH_ASSOC); // Executa interogarea si preia in modul FETCH_ASSOC | |
// Daca select-ul e facut cu succes ($datas nu e false) | |
if($datas !== false) { | |
// Se parcurg datele si afiseaza numele coloanelor | |
foreach($datas as $col=>$row) { | |
echo ' - '. $col; | |
} | |
//END parcurgerea lor cu foreach | |
//............END PDO::FETCH_ASSOC............// | |
//............PDO::FETCH_NUM............// | |
// - Returneaza fiecare rand ca un Array in care cheile sunt numere consecutive (incepand de la 0), reprezentand ordinea coloanelor din setul de rezultate (similar cu mysql_fetch_row) | |
// Selectare date din MySQL | |
$sql = "SELECT * FROM `sites`"; | |
$datas = $dbh->query($sql); | |
// Se parcurg datele | |
while($row = $datas->fetch(PDO::FETCH_NUM)) { | |
echo $row[0]. '-'. $row[1]. '<br />'; // Afiseaza datele din prima si a doua coloana | |
} | |
//............END PDO::FETCH_NUM............// | |
//............PDO::FETCH_BOTH............// | |
// - Produce un Array cu ambele tipuri de chei, atat numele coloanelor cat si numere consecutive reprezentand ordinea coloanelor din setul de rezultate. | |
// Selectare date din MySQL, unde "id" are valoarea 2 | |
$sql = "SELECT `id`, `nume` FROM `sites` WHERE `id`=2"; | |
$datas = $dbh->query($sql); | |
// Se parcurg datele | |
while($row = $datas->fetch(PDO::FETCH_BOTH)) { | |
echo $row['id']. '-'. $row['nume']. '<br />'; // Afiseaza datele din coloanele 'id' si 'nume' | |
echo $row[0]. '-'. $row[1]. '<br />'; // Afiseaza din prima si a doua coloana (aceleasi) | |
} | |
//............END PDO::FETCH_BOTH............// | |
//............PDO::FETCH_OBJ............// | |
// - Returneaza fiecare rand ca un obiect. Valorile coloanelor se acceseaza ca proprietati ale obiectului, prin numele lor. | |
// Selectare date din MySQL, randuri cu "id" mai mic decat 3 | |
$sql = "SELECT `id`, `nume` FROM `sites` WHERE `id`<3"; | |
$datas = $dbh->query($sql); | |
// Se parcurg datele | |
while($row = $datas->fetch(PDO::FETCH_OBJ)) { | |
echo $row->id. '-'. $row->nume. '<br />'; // Afiseaza datele din coloanele 'id' si 'nume' | |
} | |
//............END PDO::FETCH_OBJ............// | |
//............PDO::FETCH_CLASS............// | |
// - Permite ca datele sa fie preluate intr-o clasa, creand o instanta de obiect la acea clasa. Numele campurilor sunt folosite ca proprietati in acea clasa. Se aplica cu metoda fetchALL() | |
// Se defineste acesta clasa inainte de try | |
// Definire clasa | |
class Sites { | |
// Definire proprietati | |
public $id; | |
public $categorie; | |
// Metoda a clasei | |
function makeString() { | |
// Returneaza un sir cu valorile proprietatilor, primul caracter al cuvintelor majuscula | |
return ucwords($this->id. ' - '. $this->categorie). '<br />'; | |
} | |
} | |
// In interiorul lui try | |
// Selectare date din MySQL, coloanele "id" si "categorie" | |
$sql = "SELECT `id`, `categorie` FROM `sites`"; | |
$datas = $dbh->query($sql); | |
$obj = $datas->fetchALL(PDO::FETCH_CLASS, 'Sites'); // Aplicare FETCH_CLASS la clasa Sites | |
// Parcurge datele din setul de rezultate, creaza instanta de clasa $insSites | |
foreach($obj as $insSites) { | |
echo $insSites->makeString(); // Apeleaza metoda makeString() la instanta clasei | |
} | |
//O alternativa la FETCH_CLASS este metoda fetchObject(). Similar, si cu aceasta datele din coloanele fiecarui rand din cele obtinute la "query()" sunt preluate printr-o clasa care este adaugata ca argument la metoda. | |
// In interiorul lui try | |
// Selectare date din MySQL, coloanele "id" si "categorie" | |
$sql = "SELECT `id`, `categorie` FROM `sites`"; | |
$datas = $dbh->query($sql); | |
// Parcurgere instanta de obiect creata cu fetchObject() la clasa Sites | |
while($obj = $datas->fetchObject('Sites')) { | |
echo $obj->makeString(); // Afiseaza rezultatul apelarii metodei makeString() | |
} | |
//............END PDO::FETCH_CLASS............// | |
//............PDO::FETCH_FUNC............// | |
// - Returneaza un Array cu rezultatul apelarii unei functii, folosind ca argumente coloanele fiecarui rand din setul de rezultate. Cheile din Array sunt numere consecutive (de la 0), iar valoarea lor e rezultatul dat de functie pt. fiecare rand. | |
// se defineste in afara lui try | |
// Definire functie | |
function test($id, $nume) { | |
// Returneaza un sir cu datele din parametri, cu majuscule | |
return strtoupper($id.'-'.$nume); | |
} | |
// in interiorul lui try | |
// Selectare date din MySQL | |
$sql = "SELECT `id`, `nume` FROM `sites`"; | |
$datas = $dbh->query($sql); | |
$ar_row = $datas->fetchALL(PDO::FETCH_FUNC, 'test'); // Aplicare FETCH_FUNC la functia test() | |
var_export($ar_row); // Afiseaza structura Array-ului | |
//............END PDO::FETCH_FUNC............// | |
//............END SELECT METODA fetch()............// | |
$dbh = null; // Deconectare | |
} | |
catch(PDOException $e) { | |
echo $e->getMessage(); | |
} | |
//............INSERT............// | |
// Daca datele au fost adaugate ($coun nu e false) afiseaza nr. randuri adaugate | |
if($count !== false) echo 'Nr. randuri adaugate: '. $count; | |
//............END INSERT............// | |
//............UPDATE............// | |
// Daca interogarea e facuta cu succes ($count diferit de false) | |
if($count !== false) echo 'Randuri afectate: '. $count; // Afiseaza nr. randuri afectate | |
//............END UPDATE............// | |
//............DELETE............// | |
// Daca interogarea e facuta cu succes ($count diferit de false) | |
if($count !== false) echo 'Randuri afectate: '. $count; // Afiseaza nr. randuri afectate | |
//............END DELETE............// | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment