Utilizarea „prepared statements” în PHP cu MySQLi este o practică excelentă pentru a preveni scripturi rău-intenţionate și pentru a proteja aplicația de injecții SQL. Redăm mai jos un ghid simplu care cuprinde exemple pentru operațiunile de inserare, editare, ștergere și selecție, demonstrând cum se pot utiliza parametri în „prepared statements”.
Inserare
|
1 2 3 4 5 6 7 8 9 10 |
$nume = 'Popescu'; $prenume = 'Ionică'; $dataNasterii = '1972-10-15'; $stmt = $mysqli->prepare("INSERT INTO personalitati (nume, prenume, data_nasterii) VALUES (?, ?, ?)"); $stmt->bind_param('sss', $nume, $prenume, $dataNasterii); $stmt->execute(); echo "Inserare realizată cu succes."; $stmt->close(); |
Editare
|
1 2 3 4 5 6 7 8 9 10 |
$prenNou= 'Ion'; $numeNou = 'Popescu'; $id=1 $stmt = $mysqli->prepare("UPDATE personalitati SET prenume = ?, nume = ? WHERE id= ?"); $stmt->bind_param('ssi', $prenNou, $numeNou, $id ); $stmt->execute(); echo "Editare realizată cu succes."; $stmt->close(); |
Ștergere
|
1 2 3 4 5 6 7 |
$id= 1; $stmt = $mysqli->prepare("DELETE FROM personalitati WHERE id= ?"); $stmt->bind_param('i', $id); $stmt->execute(); echo "Ștergere realizată cu succes."; $stmt->close(); |
Select cu parametru
|
1 2 3 4 5 6 7 8 9 10 11 |
$id= 1; $stmt = $mysqli->prepare("SELECT * FROM personalitati WHERE id= ?"); $stmt->bind_param('i', $id); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['nume'] . ', ' . $row['prenume'] . "\n"; } $stmt->close(); |
Select cu parametru, dar şi cu operatorul LIKE
|
1 2 3 4 5 6 7 8 9 10 |
$q='Ion'; $query = "SELECT id, pren, nume FROM personalitati WHERE nume LIKE ? OR pren LIKE ? LIMIT 10"; $stmt = $con->prepare($query); $q_param = '%' . $q . '%'; // Variabila de căutare pentru a putea utiliza LIKE $stmt->bind_param('ss', $q_param, $q_param); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['id'] . ' ' . $row['pren'] . ' ' . $row['nume']; } |
Select fără parametru utilizând prepare
|
1 2 3 4 5 6 7 8 9 |
$stmt = $mysqli->prepare("SELECT * FROM personalitati"); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['nume'] . ", " . $row['prenume'] . "\n"; } $stmt->close(); $mysqli->close(); |
Select fără parametru utilizând query
|
1 2 3 4 5 6 7 8 9 10 11 12 |
$query = "SELECT * FROM personalitati"; $result = $mysqli->query($query); if (!$result) { die('Query failed: ' . $mysqli->error); } while ($row = $result->fetch_assoc()) { echo $row['nume'] . ", " . $row['prenume'] . "\n"; } $result->free(); $mysqli->close(); |
Este important de menționat că, chiar dacă un query nu necesită parametri, este o practică bună să-l pregătim totuși, pentru a putea utiliza metodele specifice de manipulare a rezultatelor, cum ar fi bind_result() sau store_result(), care sunt utile atunci când lucrăm cu rezultatele aduse într-o buclă. Cu toate acestea, pentru interogări simple fără parametri, query() este suficient și mai simplu de utilizat.
Este utilă, poate, verificarea dacă rezultatele sunt valide înainte de încercarea de a accesa rândurile, după cum este redat mai jos.
|
1 2 3 4 5 6 7 8 9 10 11 |
$stmt = $con -> prepare("SELECT * FROM personalitati WHERE id= ?"); $stmt -> bind_param("i", $id); $stmt -> execute(); $result = $stmt -> get_result(); if ($result && $result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo $row['nume'] . ', ' . $row['prenume'] . "\n"; } } else { echo "Nu au fost găsite înregistrări."; } |
fetch_assoc() o singură dată în loc de un while loop.
