Junior
Mis on ettevalmistatud päringud?
sobes.tech AI
Vastus AI-lt
See on meetod andmaksimaalsema turvalisuse ja jõudluse saavutamiseks andmebaasidega töötamisel, kui SQL-päringu mall saadetakse andmebaaside serverile eraldi andmetest.
Eelised:
- Kaitse SQL-investeeringute eest: Andmed töödeldakse andmebaaside serveris literaalidena, mitte osana SQL-koodist.
- Jõudlus: Andmebaaside server salvestab täitmise plaani vahemällu, mis säästab aega, kui sama päringut korratakse erinevate parameetritega.
- Mugavus: Annab võimaluse struktureerida koodi ja lihtsustada silumist.
Valmistatud päringu täitmise etapid:
- Valmistamine (Prepare): Päringu mall saadetakse andmebaaside serverile analüüsimiseks, süntaksi kontrollimiseks ja täitmise plaani koostamiseks. Mallis kasutatakse asendajaid andmete sisestamiseks.
- Sidumine (Bind): Muutujate väärtused seotakse asendajatega. Server neid SQL-koodina ei tõlgenda.
- Täitmine (Execute): Päring täidetakse seotud väärtustega.
Näide, kuidas kasutada valmistatud päringut PHP ja PDO-ga:
// Andmebaasi ühendus (näide)
$dsn = 'mysql:host=localhost;dbname=mydatabase';
$kasutaja = 'myuser';
$parool = 'mypassword';
try {
$pdo = new PDO($dsn, $kasutaja, $parool);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Ühenduse viga: ' . $e->getMessage());
}
// Valmistatud päring asendusmärkidega
$stmt = $pdo->prepare("SELECT name, email FROM users WHERE id = :id");
// Väärtuse sidumine asendusmärgile
$kasutajaId = 1;
$stmt->bindParam(':id', $kasutajaId, PDO::PARAM_INT);
// Päringu täitmine
$stmt->execute();
// Tulemuste saamine
$kasutaja = $stmt->fetch(PDO::FETCH_ASSOC);
if ($kasutaja) {
echo "Kasutaja nimi: " . htmlspecialchars($kasutaja['name']) . "<br>";
echo "Kasutaja e-post: " . htmlspecialchars($kasutaja['email']) . "<br>";
} else {
echo "ID-ga kasutajat ei leitud.";
}
Selles näites on :id nimetatud asendaja. Samuti saab kasutada positsioonilisi asendajaid (?).
// Valmistatud päring positsioonilise asendajaga
$stmt = $pdo->prepare("SELECT name, email FROM users WHERE id = ?");
// Täitmine väärtuste massiiviga
$kasutajaId = 2;
$stmt->execute([$kasutajaId]);
// Tulemuste saamine
$kasutaja = $stmt->fetch(PDO::FETCH_ASSOC);
if ($kasutaja) {
echo "Kasutaja nimi: " . htmlspecialchars($kasutaja['name']) . "<br>";
echo "Kasutaja e-post: " . htmlspecialchars($kasutaja['email']) . "<br>";
} else {
echo "ID-ga kasutajat ei leitud.";
}
?>