Skip to content

Instantly share code, notes, and snippets.

@csteri
Created October 31, 2017 11:28
Show Gist options
  • Save csteri/695d7d68b496ae0b659dc10c1ad7fe6d to your computer and use it in GitHub Desktop.
Save csteri/695d7d68b496ae0b659dc10c1ad7fe6d to your computer and use it in GitHub Desktop.
PDO PHP
<?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