Category Archives: MySQL

Utilizare CONCAT in JOIN MySQL

Acum cateva ore mi s-a cerut sa fac un JOIN in MYSQL, singura problema fiind ca in tabela relationala nu exista o coloana unde sa fie stocat id-ul inregistrarii din prima tabela.

EX tabel1:
==============
| id | title |
==============
| 1 | abc |
| 2 | bac |
==============

EX tabel2:
=========================
| id | id_string_tabel1 |
=========================
| 1 | tabel1_1 |
| 2 | tabel1_2 |
=========================

Dupa cum ati observat in tabelul 2 id-ul are un prefix, in exemplul de mai sus este: tabel1_

SQL-ul pentru JOIN in MySQL se face utilizand CONCAT

SELECT * FROM tabel1 t1
LEFT JOIN tabel2 t2 ON CONCAT('tabel1_', t1.id) = t2.id_string_tabel1

Daca aveti solutii mai simple/bune va rog sa lasati un comentariu.

Start cu procedurile stocate in MySQL

De multa vreme nu am mai create proceduri stocate ( PROCEDURE ) in MySQL, dar azi s-au schimbat multe. Vreau sa impart cu voi 2 comenzi utile:

Creeaza procedura stocata

 DELIMITER $$
 CREATE PROCEDURE `numele_procedurii` (OUT param1 INT)
        BEGIN
           SELECT COUNT(*) INTO param1 FROM nume_tabela;
        END $$
DELIMITER ;

Listeaza toate procedurile stocate

SHOW PROCEDURE STATUS;

Conectare la baza de date MySQL din PHP

Pentru a se conecta la baza de date MySQL din PHP se vor folosi urmatoarele functii din PHP:

mysql_connect($nume_server, $utilizator, $parola);

Parametrii

  • $nume_server este numele sau ip-ul serverului de MySQL ( ex: localhost, 127.0.0.1, 87.12.34.125 )
  • $utilizator este numele de utilizator cu care dorim sa ne conectam la baza de date
  • $parola este codul de access pentru utilizator de mai sus

Aceasta functie doar se conecteaza, vizual nu se va vedea nimic

mysql_select_db($nume_baza_de_date, $con);

Parametrii

  • $nume_baza_de_date este numele bazei de date la care dorim sa ne conectam
  • $con este handlerul de conexiune, este rezultatul functiei mysql_connect()

Aceasta functie doar selecteaza baza de date mentionata, vizual nu se va vedea nimic

mysql_close($con);

Aceasta functie PHP inchide conexiunea cu baza de date.

Exemplu

Dorim sa ne conectam la baza de date locala avand ip-ul 127.0.0.1 la baza de date numita wordpress, utilizatorul alex si parola 123456

1
2
3
4
5
6
7
8
9
10
11
<?php
$con = mysql_connect("127.0.0.1","alex","123456"); // salvam conexiunea in variabila $con
if (!$con)
  {
  die('Nu este posibila conectarea la baza de date din urmatoarele motive: ' . mysql_error());
  }
 
mysql_select_db("wordpress", $con); // selectam baza de date wordpress
 
mysql_close($con);  // inchidem conexiunea
?>

Extrage subtext in MySQL

Avem urmatoare tabela cu numele “prieteni”:
———————
| id | nume |
———————
| 1 | Vlad |
| 2 | Andrei |
| 3 | Delia |

Cerinta: Se cere sa se afiseze primele 2 caractere din campul nume folosind SQL.

Rezolvare : Se va folosi functia SUBSTRING(param1, param2, param3) din MySQL unde:

  • param1: nume camp
  • param2: pozitia de inceput ( !!! atentie !!! se porneste de la valoarea 1 )
  • param3: numarul de caractere (se va specifica cate caractere dorim sa afisam din campul selectat)

Solutia SQL:
===========
SELECT id, SUBSTRING(`nume`,1,2) FROM `prieteni`;

Conectare la baza de date MySQL prin PDO

PDO ( PHP Data Object ) este o interfata ce permite accesarea bazei de date. Pentru a beneficia de avantajele PDO este recomandat sa aveti instalat PHP 5.1+ .

Ex 1: Conectare la baza de date MySQL ( instalat local )

In acest exemplu ne vom conecta la baza de date locala MySQL, mai concret la baza de date cu numele “test”.

Ex 2: Selectarea datelor din baza de date MySQL, iar in caz de eroare afisam mesajele de eroare

query(‘SELECT * FROM user’) as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print “Error!: ” . $e->getMessage() . “
“;
die();
}
?>

In exemplul 2 ne vom conecta la baza de date “test” si vom afisa toti utilizatorii cu toate campurile , iar daca se intampina o eroare atunci se va afisa un mesaj de eroare ( de ex: nu exista tabela “user” )

Tranzactii cu PDO

Folosim tranzactii cand avem de rulat mai multe comenzi SQL si daca cel putin unul dintre SQL-uri nu s-a executat cu success atunci se va face rollback, adica se vor anula si SQL-urile executate cu success.

Ex: Inserare in baza de date folosind tranzactii:

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh->beginTransaction();
$dbh->exec(“insert into user (id, name, phone) values (1, ‘Ion’, ‘0259941’)”);
$dbh->exec(“insert into user_age (id, age) values (1, 16)”);
$dbh->commit();

} catch (Exception $e) {
$dbh->rollBack();
echo “Failed: ” . $e->getMessage();
}
?>

Obs: Daca unul dintre SQL-uri de inserare nu se executa cu success se va face rollback.

Conectarea la baza de date MySQL

Un exemplu simplu de conectare la baza de date MySQL, usor de implementat, pentru incepatori. Ideea este ca avem nevoie de datele de logare cum ar fi : serverul, utilizator, parola, baza de date. Se face conexiune folosind functii php. Toate astea le salvam intr-un fisier “database.php” si se va include unde se doreste lucrul cu baza de date.

Cod database.php:

mysql_connect() este functia prin care ne conectam la baza de date .
Variabila $conn va avea o valoarea TRUE sau FALSE functie de rezultatul conectarii la serverul MySQL folosind functia mysql_connect(), iar in cazul esuarii va afisa mesajul continut de constructia die().

mysql_select_db este functia care stabileste baza de date la care ne vom conecta, avand ca parametrii numele bazei de date si identificatorul de acces la conexiunea catre serverul MySQL.

Dupa ce operatiile dorite au fost executate cu baza de date va trebui sa inchidem conexiunea folosind functia mysql_close() avand ca argument datele de acces la serverul MySQL.
mysql_close($conexiune);

Hai sa facem si un test creand fisierul test_mysql.php :

Mare atentie: Dupa ce am creat baza de date, si un utilizator in mysql, trebuie asociate utilizatorul cu baza de date. Pentru fiecare baza de date se pot asocia unul sau mai multi utilizatori mysql cu diferite drepturi.

Export Baza de date MySQL din terminal

Exista multe solutii pentru a face o copie dupa baza de date intr-un fisier sql . Voi prezenta o metoda foarte usoara pentru a face un export pentru baza de date.

Aceasta solutie functioneaza doar din terminal, este necesara sa aveti conexiune la server.

De exemplu baza de date “tutoriale”, utilizator baza de date “admin”, parola “1234” si dorim sa facem un export in fisierul “tutoriale.sql” .

Nimic mai simplu:

mysqldump -uadmin -p1234 tutoriale > tutoriale.sql

!Atentie: dupa -u vine utilizator si dupa -p vine parola apoi numele bazei de date, semnul > si numele fisierului pentru export.

Structura export Mysql cu Mysqldump:

mysqldump -u[utilizator] -p[parola] [nume_baza_de_date] > [nume_fisier]

Bafta!

Import baza de date Mysql dintr-un fisier

Exista multe solutii pentru a importa o baza de date dintr-un fisier sql . Voi prezenta o metoda foarte usoara pentru a face un import de baza de date.

Aceasta solutie functioneaza doar din terminal, este necesara sa aveti conexiune la server.

De exemplu doriti un import din fisierul “tutoriale.sql” .

Foarte usor se poate face acest lucru.

Structura unui import Mysql :

mysql -u[utilizator] -p[parola] [nume_baza_de_date] < [nume_fisier]

Ex: mysql -uadmin -p1234 tutoriale si numele fisierului pentru export.

Bafta!

LEFT JOIN

LEFT JOIN este o sintaxa destul de dificil de inteles, trebuie exersat foarte mult si se va intelege exersand. Partea de teorie pura va las sa studiat din alte surse: carti mysql, sau cautand pe google.

Va arat cum se foloseste LEFT JOIN si la ce ne ajuta. Consideram 2 tabele:

utilizatori:
=======================
nume | varsta =
=======================
ion | 23
andra | 32
maria | 17
======================

si tabelul localitati:
=======================
nume | localitate =
=======================
ion | Oradea
andra | Brasov
maria | Pitesti
======================

Consideram urmatoarea sintaxa MySQL:

SELECT utilizatori.nume,utilizatori.varsta, localitati.localitate
FROM utilizatori
LEFT JOIN localitati
ON utilizatori.nume = localitati.nume

Rezultatul acestei interogari va fi:
================================
nume | varsta | localitate =
================================
ion | 23 | Oradea =
andra | 32 | Brasov =
maria | 17 | Pitesti =
================================

Va rog sa nu ezitati sa va jucati cu LEFT JOIN pana cand va simtiti ca o stapaniti. Chestia asta nu este usoara!

Bafta!
Echipa Tutoriale PHP, CSS, MySQL, HTML