Introducere în MySQL/PHP

Ora și data în PHP

MySQL este unul dintre cele mai populare și mai frecvent utilizate relaționale din lume baze de date. Este un instrument puternic pentru stocarea și organizarea unor volume mari de date într-o manieră sistematică și eficientă. PHP este un limbaj de programare pe partea de server pentru interacțiunea cu bazele de date MySQL și crearea de aplicații web dinamice. MySQL și PHP 8 funcționează bine împreună pentru a crea o platformă robustă de dezvoltare web. În această introducere la MySQL/PHP, vom trece peste elementele fundamentale ale conectării la o bază de date MySQL cu PHP 8, vom efectua activități CRUD (Create, Read, Update, and Delete) și ne asigurăm cod este sigur și securizat.

Configurarea unui mediu de dezvoltare pentru MySQL

Configurarea unei dezvoltări MySQL/PHP8 mediu inconjurator poate părea dificil la început, dar cu instrumentele corecte și puțin ajutor, poate fi un proces simplu. În această parte, vom trece peste procesele necesare pentru a vă configura local mediu de dezvoltare.

Mai întâi, trebuie să instalați aplicațiile necesare. Un server web, cum ar fi Apache sau Nginx, PHP8 și MySQL sunt toate incluse. Aceste componente pot fi instalate într-o varietate de metode, în funcție de sistemul dvs. de operare. Pe Windows, de exemplu, puteți utiliza pachetele software WAMP sau XAMPP, care vin preinstalate cu Apache, PHP și MySQL. Pentru a instala aplicațiile necesare pe Linux, utilizați manageri de pachete, cum ar fi apt sau yum.

După ce ați instalat software-ul corespunzător, puteți începe să construiți o bază de date. MySQL include o interfață de linie de comandă cunoscută sub numele de client de linie de comandă MySQL, care poate fi utilizată pentru a construi o nouă bază de date și a stabili un cont de utilizator. De asemenea, puteți gestiona bazele de date folosind o interfață grafică precum phpMyAdmin.

Conectarea la o bază de date MySQL

Primul pas în utilizarea PHP pentru a face față unei baze de date MySQL este conectarea la aceasta. Acest lucru poate fi realizat prin utilizarea extensiilor MySQLi sau PDO (PHP Data Objects). Ambele extensii oferă capabilități comparabile, totuși PDO este mai versatil și se poate conecta la diferite baze de date, în timp ce MySQLi este limitat la MySQL.

Iată un exemplu despre cum să vă conectați la o bază de date MySQL folosind MySQLi cu sintaxă în stil procedural:

<?php
/* Connection parameters */
$host = 'localhost';
$user = 'root';
$password = 'password';
$dbname = 'test';
/* Connect to the database */
$mysqli = mysqli_connect($host, $user, $password, $dbname);
/* Check for errors */
if (mysqli_connect_errno())
{
   echo 'Connection failed: ' . mysqli_connect_error();
   die();
}

Și iată un exemplu despre cum să vă conectați la o bază de date MySQL folosind PDO:

<?php
/* Connection parameters */
$host = 'mysql:host=localhost;dbname=test';
$user = 'root';
$password = 'password';
/* Connect to the database */
$pdo = new PDO($host, $user, $password);

Efectuarea operațiunilor CRUD

Odată ce ați stabilit o conexiune la o bază de date MySQL, puteți efectua operațiuni CRUD. CRUD înseamnă Create, Read, Update, and Delete și reprezintă cele patru operațiuni de bază pe care le puteți efectua într-o bază de date.

Crearea

Crea: Pentru a introduce un nou rând într-o tabel, puteți utiliza funcția INSERT comanda. Iată un exemplu despre cum să inserați un nou produs într-un tabel de produse folosind MySQLi cu sintaxă în stil procedural:

<?php
/* Include the connection script */
include 'db_inc.php';
/* Values */
$product_name = 'toothpaste';
$product_price = 5;
/* Build the query */
$query = "INSERT INTO products (name, price) VALUES ('" . mysqli_real_escape_string($mysqli, $product_name) . "', " . mysqli_real_escape_string($mysqli, $product_price)  . ")";
/* Execute the SQL query */
if (!mysqli_query($mysqli, $query))
{
   /* if mysqli_query() returns FALSE it means an error occurred */
   echo 'Query error: ' . mysqli_error($mysqli);
   die();
}
echo "Product added successfully<br>";

Citind

Odată ce de date este într-un tabel, trebuie citit pentru a fi afișat utilizatorului. Instrucțiunea SELECT SQL este utilizată pentru a citi rândurile dintr-un tabel. Sintaxa acestei comenzi este următoarea:

SELECT column1, column2, column3 FROM table_name;

Utilizați următoarea interogare pentru a citi toate intrările dintr-o bază de date „produse”, de exemplu:

SELECT * FROM products;

Pentru a efectua acest lucru întrebare și buclă peste rezultat setat cu PHP, utilizați MySQLi sau biblioteci PDO. De exemplu, folosind MySQLi cu sintaxa procedurală:

<?php
/* Include the MySQLi (procedural-style) connection script */
include 'db_inc.php';
/* Query */
$query = 'SELECT * FROM products';
/* Execute the query */
$result = mysqli_query($mysqli, $query);
/* Check for errors */
if (!$result)
{
   echo 'Query error: ' . mysqli_error($mysqli);
   die();
}
/* Iterate through the result set */
while ($row = mysqli_fetch_assoc($result))
{
   echo 'Product name: ' . $row['name'] . ', price: '

Actualizarea

Acțiunea Actualizare modifică datele existente într-un tabel. Următoarea este sintaxa fundamentală pentru operația de actualizare:

UPDATE table_name SET column1 = new_value1, column2 = new_value2, ... WHERE some_column = some_value;

De exemplu, să presupunem că avem un tabel de produse cu următoarele date:

IDnumepreţ
1Pastă de dinţi5
2Încălțăminte50
3Laptop1000

Și vrem să actualizăm prețul pastei de dinți de la 5 USD la 4.50 USD.

întrebare pentru aceasta operatie ar fi:

UPDATE products SET price = 4.50 WHERE name = 'Toothpaste';

Trebuie remarcat faptul că clauza WHERE este folosită pentru a indica rând sau rânduri care urmează să fie actualizate. Dacă clauza WHERE este omisă, toate rândurile din tabel sunt modificate.

Pentru exemplul de mai sus, putem folosi următorul cod PHP:

<?php
/* Include the connection script */
include 'db_inc.php';
/* Values */
$product_name = 'Toothpaste';
$product_price = 4.50;
/* Build the query */
$query = "UPDATE products SET price = " . $product_price . " WHERE name = '" . $product_name . "'";
/* Execute the SQL query */
if (!mysqli_query($mysqli, $query))
{
   /* if mysqli_query() returns FALSE it means an error occurred */
   echo 'Query error: ' . mysqli_error($mysqli);
   die();
}
echo "Product updated successfully<br>";

Ștergerea

Pentru a șterge datele existente din a tabel, folosește Șterge acțiune. Operația de ștergere are următoarea sintaxă de bază: SELECTAȚI o coloană din numele tabelului WHERE o valoare = o valoare; Să presupunem că avem un tabel de produse cu următoarele informații:

| ID | nume | pret |
|—-|———–|——-|
| 1 | Pasta de dinti| 5 |
| 2 | Pantofi | 50|
| 3 | Laptop | 1000 |

Și vrem să ștergem pasta de dinți de pe masă. Interogarea pentru această operațiune ar fi:

DELETE FROM products WHERE name = 'Toothpaste'; 

Trebuie remarcat faptul că clauza WHERE este folosită pentru a defini rândul sau rândurile care urmează să fie șterse. Dacă clauza WHERE este omisă, toate rândurile din tabel sunt eliminate.
Pentru exemplul de mai sus, putem folosi codul PHP:

<?php
/* Include the connection script */
include 'db_inc.php';
/* Values */
$product_name = 'Toothpaste';
/* Build the query */
$query = "DELETE FROM products WHERE name = '" . $product_name . "'";
/* Execute the SQL query */
if (!mysqli_query($mysqli, $query))
{
   /* if mysqli_query() returns FALSE it means an error
}
echo "Product deleted successfully<br>";

Prevenirea injectării SQL

Prevenirea injectării SQL este o parte esențială a lucrului cu MySQL și PHP. Atacurile cu injecție SQL reprezintă un risc major de securitate web și pot provoca pagubă serioasă în baza ta de date dacă nu este adresată corect. În această secțiune, vom acoperi elementele de bază ale prevenirii atacurilor prin injecție SQL prin utilizare sigur tehnici de construire a interogărilor, cum ar fi instrucțiunile pregătite și evadarea utilizator intrare.

Declarațiile pregătite sunt puternice și sigure metodă pentru construirea și executarea interogărilor SQL. Acestea sunt o modalitate de a separa logica unei interogări de datele care sunt utilizate în interogare. Această separare a logicii și a datelor face mult mai greu pentru un atacator să injecteze cod SQL rău intenționat în interogarea dvs.

De exemplu, luați în considerare următorul cod:

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($mysqli, $query);

Interogarea din acest exemplu este generată utilizând date din variabilele $nume utilizator și $parolă. Un atacator poate introduce cod SQL rău intenționat în interogare dacă a introdus date proaste în aceste variabile.

Pentru a preveni acest tip de atac, utilizați propoziții pregătite ca aceasta:

$query = "SELECT * FROM users WHERE username = ? AND password = ?";
$stmt = mysqli_prepare($mysqli, $query);
mysqli_stmt_bind_param($stmt, "ss", $username, $password);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

În acest exemplu, interogarea este construită cu substituenți (?) mai degrabă decât cu date. Datele sunt apoi date individual la interogare folosind funcția mysqli_stmt::bind_param. Deoarece logica și datele sunt separate, este mult mai dificil pentru un atacator să introducă cod SQL rău intenționat în interogare.

evadarea introducerea utilizatorului este o altă metodă pentru evitarea atacurilor cu injecție SQL. Evadarea este procesul de procesare a unei variabile prin eliminarea tuturor caracterelor potențial dăunătoare (cum ar fi „ și %) care ar putea duce la probleme SQL sau atacuri de injecție.

Luați în considerare următorul cod ca exemplu:

$username = $_REQUEST['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($mysqli, $query);

În acest exemplu, $username variabila este utilizată în interogare fără nicio protecție. Pentru a preveni atacurile de injectare SQL, puteți utiliza mysqli_real_escape_string functioneaza dupa cum urmeaza:

$username = mysqli_real_escape_string($mysqli, $_REQUEST['username']);
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($mysqli, $query);

În acest exemplu, mysqli_real_escape_string funcția este folosită pentru a scăpa de $username variabilă înainte de a fi utilizată în interogare. Acest lucru face mult mai dificil pentru un atacator să injecteze cod SQL rău intenționat în interogare.

În concluzie, prevenirea injectării SQL este o parte esențială a lucrului cu MySQL și PHP. Declarațiile pregătite și intrarea utilizatorului care evadează sunt metode puternice și sigure pentru construirea și executarea interogărilor SQL. Folosind aceste tehnici, puteți foarte mult reduce riscul atacurilor cu injecție SQL și păstrați-vă baza de date în condiții de siguranță.

Caracteristici avansate MySQL

MySQL este un sistem de gestionare a bazelor de date relaționale robust și bogat în caracteristici și poate doriți să utilizați unele dintre capabilitățile sale avansate pe măsură ce vă simțiți mai confortabil cu el. Cu această parte, ne vom uita la unele dintre capabilitățile mai complexe ale MySQL, cum ar fi procedurile stocate, declanșatoarele și vizualizările și cum să le utilizăm în PHP8.

Proceduri stocate: O procedură stocată este o colecție de instrucțiuni SQL care pot fi salvate într-o bază de date și apoi efectuate ca o singură unitate ulterior. Procedurile stocate vă pot ajuta să încapsulați o logică complicată, să reutilizați codul și să îmbunătățiți performanța reducând la minimum numărul de călătorii dus-întors între aplicația dvs. și baza de date.

Instrucțiunea Construct PROCEDURE din MySQL poate fi folosită pentru a crea o procedură stocată. De exemplu, următoarea procedură stocată primește un ID de angajat ca argument și returnează numele și salariul angajatului:

DELIMITER $$
CREATE PROCEDURE get_employee_info (IN emp_id INT)
BEGIN
    SELECT name, salary FROM employees WHERE id = emp_id;
END$$
DELIMITER ;

Puteți apela o procedură stocată în PHP8 folosind metoda PDO::prepare(), urmată de metoda PDOStatement::execute(). De exemplu:

$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'password');
$stmt = $pdo->prepare('CALL get_employee_info(:emp_id)');
$stmt->execute(array(':emp_id' => 42));
$row = $stmt->fetch();

Declanșările:
Declanșatoarele sunt un grup de instrucțiuni care sunt executate automat ca răspuns la un anumit eveniment, cum ar fi o instrucțiune INSERT, UPDATE sau DELETE. Declanșatorii pot fi utilizați pentru a impune limitări, modificări de audit sau actualizări în cascadă sau eliminări.

Comanda Generate TRIGGER din MySQL poate fi folosită pentru a crea un declanșator. De exemplu, atunci când o înregistrare este actualizată, următorul declanșator modifică tabelul modificat la coloana:

CREATE TRIGGER update_modified_at
    BEFORE UPDATE ON mytable
    FOR EACH ROW
    SET NEW.modified_at = NOW();

Vizualizări:

O vizualizare este un tabel virtual creat din rezultatele unei operațiuni SELECT. Vizualizările pot fi folosite pentru a simplifica căutările complexe, pentru a ascunde datele sensibile și pentru a aplica standardele de securitate.

Instrucțiunea Build VIEW din MySQL poate fi folosită pentru a crea o vizualizare. De exemplu, următoarea vizualizare afișează numai numele și salariul angajaților care câștigă mai mult de 50,000 USD:

CREATE VIEW high_salary_employees AS
    SELECT name, salary FROM employees WHERE salary > 50000;

Puteți interoga o vizualizare în același mod în care ați interoga un tabel, utilizând metodele PDO::query() sau PDO::prepare(). Ca exemplu:

$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'password');
$stmt = $pdo->query('SELECT * FROM high_salary_employees');

În această secțiune, am văzut câteva dintre caracteristicile avansate ale MySQL și cum să le folosim în PHP8.

Cele mai bune practici

Cod organizare: Este esențial să vă păstrați codul organizat și structurat, astfel încât să poată fi citit și întreținut cu ușurință. Acest lucru poate fi realizat prin folosirea de funcții, clase și spații de nume, precum și prin aderarea la un standard de denumire consecvent.

Depanarea: Când lucrați cu MySQL/PHP8, este esențial să învățați cum să vă depanați codul. Acest lucru poate fi realizat prin folosirea unor instrumente precum PHP Debug Bar sau Xdebug, precum și prin învățarea cum să citiți și să înțelegeți mesajele de eroare.

Optimizarea performanței: Una dintre cele mai critice părți ale lucrului cu MySQL/PHP8 este să vă asigurați că codul dvs. este performant. Acest lucru poate fi realizat prin utilizarea caching-ului, a indexării și a unui design bun al bazei de date, precum și prin învățarea cum să vă optimizați interogările folosind comanda MySQL EXPLAIN.

Securitate: Când lucrați cu MySQL/PHP8, aveți întotdeauna în vedere securitatea. Pentru a preveni atacurile prin injectare SQL, utilizați instrucțiuni pregătite și evitați intrarea utilizatorului. Pentru informații sensibile, utilizați criptarea.

Utilizarea DOP: Utilizați PDO (PHP Data Objects) ca interfață pentru a interacționa cu bazele de date pentru a spori securitatea și a încuraja cele mai bune practici. PDO oferă instrucțiuni pregătite, ceea ce îl face mult mai sigur decât rutinele mysql_*.

Utilizarea ORM: ORM este o tehnologie care vă permite să interfațați cu baza de date folosind o sintaxă orientată pe obiecte. În loc să scrieți interogări SQL, puteți executa activități CRUD în baza de date folosind un cadru ORM, cum ar fi Doctrine sau Eloquent.

MySQL-ul dvs. va fi gestionabil, performant și în siguranță urmând aceste bune practici.

Q & A

Î: Care este cea mai frecventă eroare de securitate în timpul utilizării MySQL/PHP8?
R: Când lucrați cu MySQL/PHP8, cea mai frecventă problemă legată de securitate este utilizarea variabilelor nesigure în interogările SQL fără a le scăpa sau a utiliza instrucțiuni pregătite. Acest lucru poate duce la atacuri de injectare SQL, care sunt clasate ca riscul numărul unu de securitate online de către OWASP.

Î: Ce sunt instrucțiunile pregătite și de ce contează ele în MySQL/PHP8?
R: Declarațiile pregătite sunt o metodă de a crea interogări SQL care sunt atât sigure, cât și eficiente. Vă permit să izolați logica de interogare SQL de date și să scăpați automat de orice intrare de utilizator. Acest lucru le face mult mai sigure decât evadarea manuală a intrărilor utilizatorului și poate ajuta la prevenirea atacurilor prin injecție SQL.

Î: Cum pot configura un mediu de dezvoltare local MySQL/PHP8?
R: Există câteva etape implicate în configurarea unui mediu de dezvoltare locală pentru MySQL/PHP8. Pentru a începe, trebuie să instalați software-ul necesar, care include un server web (cum ar fi Apache sau Nginx), PHP8 și MySQL. Următorul pas este să construiți o nouă bază de date și să configurați mediul PHP8 pentru a vă conecta la acesta. Acest lucru se realizează de obicei prin schimbarea unui fișier de configurare PHP și adăugarea informațiilor relevante de conectare la baza de date.

Î: Care sunt câteva practici recomandate pentru utilizarea MySQL și PHP8?
R: Utilizarea instrucțiunilor pregătite sau evadarea intrărilor utilizatorului pentru a preveni amenințările de injectare SQL, structurarea codului pentru întreținere și depanare simplă și optimizarea codului pentru performanță sunt câteva dintre cele mai bune practici atunci când aveți de-a face cu MySQL/PHP8. De asemenea, este esențial să vă mențineți software-ul și dependențele la zi pentru a reduce amenințările de securitate și pentru a asigura compatibilitatea.

Î: Care sunt unele capabilități MySQL sofisticate și cum pot fi utilizate cu PHP8?
R: Caracteristicile avansate ale MySQL includ proceduri stocate, declanșatoare și vizualizări. Procedurile stocate sunt instrucțiuni SQL care au fost pre-compilate și pot fi executate de mai multe ori, declanșatoarele sunt scripturi care rulează automat atunci când anumite evenimente apar într-o bază de date, iar vizualizările sunt tabele virtuale care pot fi utilizate pentru a simplifica căutările complexe. Aceste funcționalități sunt disponibile în PHP8, incluzându-le în interogările SQL și procesând rezultatele în mod corespunzător.

Exerciții:

  1. Cum vă conectați la o bază de date MySQL folosind PHP8?
  2. Cum executați o instrucțiune SELECT în PHP8 pentru a citi date dintr-un tabel MySQL?
  3. Cum executați o instrucțiune INSERT în PHP8 pentru a adăuga date la un tabel MySQL?
  4. Cum executați o instrucțiune UPDATE în PHP8 pentru a actualiza datele dintr-un tabel MySQL?
  5. Cum executați o instrucțiune DELETE în PHP8 pentru a șterge date dintr-un tabel MySQL?
  6. Cum preveniți atacurile cu injecție SQL când utilizați PHP8 pentru a interacționa cu o bază de date MySQL?

răspunsuri:

  1. Pentru a vă conecta la o bază de date MySQL folosind PHP8, puteți utiliza mysqli_connect() funcția sau PDO clasă. Ambele metode necesită să furnizați detalii de conexiune, cum ar fi numele de gazdă, numele de utilizator, parola și numele bazei de date.
  2. Pentru a executa o instrucțiune SELECT în PHP8 pentru a citi date dintr-un tabel MySQL, puteți utiliza mysqli_query() funcția sau PDO::query() metodă. Apoi puteți utiliza funcții precum mysqli_fetch_assoc() or PDO::fetch() pentru a itera prin rândurile returnate.
  3. Pentru a executa o instrucțiune INSERT în PHP8 pentru a adăuga date la un tabel MySQL, puteți utiliza mysqli_query() funcția sau PDO::query() metodă. Nu uitați să utilizați instrucțiuni pregătite sau evadare pentru a vă asigura că introducerea utilizatorului este sigură de utilizat în interogare.
  4. Pentru a executa o instrucțiune UPDATE în PHP8 pentru a actualiza datele dintr-un tabel MySQL, puteți utiliza mysqli_query() funcția sau PDO::query() metodă. Nu uitați să utilizați instrucțiuni pregătite sau evadare pentru a vă asigura că introducerea utilizatorului este sigură de utilizat în interogare.
  5. Pentru a executa o instrucțiune DELETE în PHP8 pentru a șterge date dintr-un tabel MySQL, puteți utiliza mysqli_query() funcția sau PDO::query() metodă. Nu uitați să utilizați instrucțiuni pregătite sau evadare pentru a vă asigura că introducerea utilizatorului este sigură de utilizat în interogare.
  6. Pentru a preveni atacurile de injectare SQL atunci când utilizați PHP8 pentru a interacționa cu o bază de date MySQL, ar trebui să utilizați instrucțiuni pregătite sau evadare pentru a vă asigura că intrarea utilizatorului este sigură de utilizat în interogări. Acest lucru se poate face folosind funcții precum mysqli_real_escape_string() sau PDO::quote() metoda de evadare sau folosirea mysqli_prepare() funcția sau PDO::prepare() metoda pentru declarațiile întocmite.

În cazul în care doriți să aflați mai multe despre MySQL după această introducere în MySQL/PHP, vă recomandăm următoarele referință oficială.

Ora și data în PHP
en English
X
Derulaţi în sus