Sobes.tech
Junior

რა არის მომზადებული კითხვები?

sobes.tech AI

პასუხი AI-სგან

Бұл мәліметтер базасымен жұмыс жасағанда қауіпсіздік пен өнімділікті арттырудың тәсілі болып табылады, онда SQL сұрауының үлгісі мәліметтер серверіне деректерден бөлек жіберіледі.

Артықшылықтары:

  • SQL инъекцияларынан қорғау: Мәліметтер мәліметтер серверінде литералдар ретінде өңделеді, SQL кодының бөлігі ретінде емес.
  • Өнімділік: Мәліметтер сервері сұраудың орындалу жоспарын кэшке сақтайды, бұл бірдей сұрауды бірнеше рет орындауда уақытты үнемдейді.
  • Ыңғайлылық: Кодты құрылымдауға және қателерді табуды жеңілдетеді.

Дайындалған сұраудың орындалу кезеңдері:

  1. Дайындау (Prepare): Сұрау үлгісі мәліметтер серверіне талдау, синтаксисті тексеру және орындалу жоспарын құру үшін жіберіледі. Үлгіде деректерді қою үшін ауыстырып салғыштар пайдаланылады.
  2. Байланыстыру (Bind): Өзгермелі мәндер ауыстырып салғыштарға байланады. Сервер оларды SQL коды ретінде түсінбейді.
  3. Орындау (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 бойынша қолданушы табылмады.";
}
?>