Junior
რა არის მომზადებული კითხვები?
sobes.tech AI
პასუხი AI-სგან
Бұл мәліметтер базасымен жұмыс жасағанда қауіпсіздік пен өнімділікті арттырудың тәсілі болып табылады, онда SQL сұрауының үлгісі мәліметтер серверіне деректерден бөлек жіберіледі.
Артықшылықтары:
- SQL инъекцияларынан қорғау: Мәліметтер мәліметтер серверінде литералдар ретінде өңделеді, SQL кодының бөлігі ретінде емес.
- Өнімділік: Мәліметтер сервері сұраудың орындалу жоспарын кэшке сақтайды, бұл бірдей сұрауды бірнеше рет орындауда уақытты үнемдейді.
- Ыңғайлылық: Кодты құрылымдауға және қателерді табуды жеңілдетеді.
Дайындалған сұраудың орындалу кезеңдері:
- Дайындау (Prepare): Сұрау үлгісі мәліметтер серверіне талдау, синтаксисті тексеру және орындалу жоспарын құру үшін жіберіледі. Үлгіде деректерді қою үшін ауыстырып салғыштар пайдаланылады.
- Байланыстыру (Bind): Өзгермелі мәндер ауыстырып салғыштарға байланады. Сервер оларды SQL коды ретінде түсінбейді.
- Орындау (Execute): Сұрау байланған мәндермен орындалады.
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 бойынша қолданушы табылмады.";
}
Бұл мысалда :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 бойынша қолданушы табылмады.";
}
?>