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 менен колдонуучу табылган жок.";
}
Бул мисалда :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 менен колдонуучу табылган жок.";
}
?>