Junior
Суолҳои омодашуда чистанд?
sobes.tech AI
Ҷавоб аз AI
Интиқоли SQL-роҳбарӣ роҳи беҳтар кардани амният ва иҷроиш дар кор бо базаҳои додаҳо мебошад, вақте ки намунаи пурсиш 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) . " ёфт нашуд.";
}
?>