Sobes.tech
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:

  1. Valmistamine (Prepare): Päringu mall saadetakse andmebaaside serverile analüüsimiseks, süntaksi kontrollimiseks ja täitmise plaani koostamiseks. Mallis kasutatakse asendajaid andmete sisestamiseks.
  2. Sidumine (Bind): Muutujate väärtused seotakse asendajatega. Server neid SQL-koodina ei tõlgenda.
  3. 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.";
}
?>