Junior
Ի՞նչ են պատրաստված հարցումները:
sobes.tech AI
Պատասխան AI-ից
Սա անվտանգության և արտադրողականության բարձրացման միջոց է տվյալների բազաների հետ աշխատելիս, երբ SQL հարցման ձևանմուշը առանձին է տվյալների սերվերից:
Առավելություններ:
- Անվտանգություն SQL ինյեկցիաներից: Տվյալները մշակվում են տվյալների բազայի սերվերով որպես լիտերալներ, ոչ թե որպես SQL կոդի մաս:
- Արդյունավետություն: Տվյալների բազայի սերվերը պահում է հարցման կատարման պլանը, ինչը խնայում է ժամանակը նույն հարցման բազմակի կատարման ժամանակ:
- Հարմարավետություն: Օգնում է կոդը կառուցել և հեշտացնել սխալների հայտնաբերում:
Պատրաստված հարցման կատարման փուլերը:
- Պատրաստում (Prepare): Հարցման ձևանմուշը ուղարկվում է տվյալների բազայի սերվերին վերլուծության, սինտաքսի ստուգման և կատարման պլանի կառուցման համար: Դրանում օգտագործվում են փոխարինող նշաններ տվյալների տեղադրելու համար:
- Կապում (Bind): Փոփոխականների արժեքները կապվում են փոխարինող նշաններին: Սերվերը դրանք որպես SQL կոդ չեն մեկնաբանում:
- Կատարման (Execute): Հարցումը կատարվում է կապակցված արժեքներով:
Օրինակ՝ պատրաստված հարցման օգտագործում PHP-ով PDO-ի հետ:
// Տվյալների բազայի կապ (օրինակ)
$dsn = 'mysql:host=localhost;dbname=mydatabase';
$օգտատեր = 'myuser';
$գաղտնաբառ = 'mypassword';
try {
$pdo = new PDO($dsn, $օգտատեր, $գաղտնաբառ);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Կապի սխալ: ' . $e->getMessage());
}
// Հարցման պատրաստում փոխարինողներով
$stmt = $pdo->prepare("SELECT name, email FROM users WHERE id = :id");
// Արժեքի կապում փոխարինողի հետ
$օգտագործողId = 1;
$stmt->bindParam(':id', $օգտագործողId, PDO::PARAM_INT);
// Հարցման կատարում
$stmt->execute();
// Նվագների ստացում
$օգտագործող = $stmt->fetch(PDO::FETCH_ASSOC);
if ($օգտագործող) {
echo "Օգտագործողի անունը: " . htmlspecialchars($օգտագործող['name']) . "<br>";
echo "Օգտագործողի էլ.փոստը: " . htmlspecialchars($օգտագործող['email']) . "<br>";
} else {
echo "Օգտագործող ID-ով " . htmlspecialchars($օգտագործողId) . " չի գտնվել.";
}
Այս օրինակով :id նշանավոր փոխարինողն է: Կարող են օգտագործվել նաև դիրքային փոխարինողներ (?).
// Պատրաստված հարցում դիրքային փոխարինողով
$stmt = $pdo->prepare("SELECT name, email FROM users WHERE id = ?");
// Կատարման ժամանակ փոխանցվող արժեքների զանգված
$օգտագործողId = 2;
$stmt->execute([$օգտագործողId]);
// Նվագների ստացում
$օգտագործող = $stmt->fetch(PDO::FETCH_ASSOC);
if ($օգտագործող) {
echo "Օգտագործողի անունը: " . htmlspecialchars($օգտագործող['name']) . "<br>";
echo "Օգտագործողի էլ.փոստը: " . htmlspecialchars($օգտագործող['email']) . "<br>";
} else {
echo "Օգտագործող ID-ով " . htmlspecialchars($օգտագործողId) . " չի գտնվել.";
}
?>