MySQL ga kirish

PHP - foydalanuvchi ma'lumotlarini ma'lumotlar omboriga saqlash imkoni mavjud bo'lgan va veb-app(application) larni yaratishda ko'p ishlatiladigan skriptlash tili hisoblanadi.

Bu darsda biz ma'lumotlar ombori bilan masofadan turib bog'lash va ro'yhat(table) lar ustida SQL so'rovlarni bajarishni o'rganamiz.

Agar SQL so'rovlarni yozishni bilmasangiz, keyingi darslarimiz MySQL darslari bo'lib, o'sha darslarimizda bemalol o'rganishga imkoningiz bo'ladi.

Biz MySQL bilan PHP-dan foydalanish uchun mysqli yoki PDO-dan foydalanishimiz mumkin. Bu darsimizda biz 12 tilni va shuningdek, SQL inyeksiyani oldini olish uchun prepared statements(oldindan tayyorlangan buyruqlar)-ni qo'llab-quvvatlaganligi sababli PDO-ni ko'proq yoritamiz.

PDO-ni o'rnatish

Quyidagi ko'rsatmalarga amal qiling: http://php.net/manual/en/pdo.installation.php

MySQL serverga ulash

Har qanday so'rovni bajarishdan oldin biz birinchi MySQL serveriga ulashimiz kerak.

Quyidagi kod PDO orqali MySQL serveriga ulanish uchun:

<?php
// server ma'lumotlar
$servername = "localhost";
$username = "username";
$password = "password";

try 
{
    $conn = new PDO("mysql:host=$servername; dbname=myDB", $username, $password);
    // istisno holatida PDO xato rejimini o'rnatish
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Muvaffaqiyatli bog'landi"; 
}
catch(PDOException $e)
{
    echo "Ulanishda xatolik: " . $e->getMessage();
}

?>

Yuqoridagi kodda, siz username va password ma'lumotlarni o'zingizni server ma'lumotlaringiz bo'yicha o'zgartirishingiz kerak bo'ladi.

Bog'lanishni to'xtatish

Biz o'zimizga bog'liq ishni bajarib bo'lganimizdan keyin MySQL serveridan aloqani uzish ya'ni to'xtatish bu yaxshi amaliyot. Bu juda oson, shunchaki ulanish obyektimizni null-ga tenglab qo'ysak bo'lgani, quyidagidek:

<?php

// MySQL server aloqasini uzish
$conn = null;

?>

Ma'lumot omborini yaratish

Ma'lumot ombori ma'lumot saqlanadigan joyda bir yoki undan ko'p ro'yhat(table)-larni o'z ichiga oladi.

Biz MySQL-da PDO orqali PHP-dan foydalanib, ma'lumot omborini yaratish uchun CREATE sql so'rovini yozishimiz kifoya.

Quyidagi kod:

<?php

// MySQL serverga ulash
$servername = "localhost";
$username = "username";
$password = "password";

try 
{
    $conn = new PDO("mysql:host=$servername", $username, $password);
    // istisno holatida PDO xato rejimini o'rnatish
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // ma'lumot ombori yaratish uchun sql so'rov
    $sql = "CREATE DATABASE myDBPDO";
    // exec() dan foydalaning, chunki hech qanday natija qaytmaydi
    $conn->exec($sql);
    echo "Ma'lumot ombori yaratildi!<br/>";
}
catch(PDOException $e)
{
    echo $sql . "<br/>" . $e->getMessage();
}

// MySQL serverdan uzish
$conn = null;

?>

PHP da exception handling mavjud bo'lib, ma'lumotlar omborida SQL so'rovlar bajarish paytida istisnolar duch kelishi ehtimoli yuqori bo'lganligi sababli exception handling, mysqli dan ko'ra yaxshiroq.

Xuddi yuqoridagi kodga o'xshab, $sql o'zgaruvchimizda xohlagan SQL so'rovimizni kiritishimiz va exec() funksiyasi orqali so'rovni bajarishimiz mumkin bo'ladi.

Ro'yhat(table) yaratish

Xuddi yuqoridagi kodimizdagidek, biz ro'yhat ham yaratishimiz mumkin, shunchaki biz $sql o'zgaruvchimizdagi so'rovni CREATE TABLE so'roviga almashtirishimiz kifoya.

Quyida User ro'yhatini yaratish va uning ustunlari userid, email, password va fullname-ga namuna mavjud:

// ro'yhatni yaratish uchun sql so'rov
$sql = "CREATE TABLE User (
        userid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
        email VARCHAR(50) NOT NULL,
        password VARCHAR(50) NOT NULL,
        fullname VARCHAR(50)
        )";

Bu yerda ma'lumot uchun to'liq kod:

<?php

// MySQL serverga ulash
$servername = "localhost";
$username = "username";
$password = "password";

try 
{
    $conn = new PDO("mysql:host=$servername", $username, $password);
    // istisno holatida PDO xato rejimini o'rnatish
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // ro'yhatni yaratish uchun sql so'rov
    $sql = "CREATE TABLE User (
            userid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
            email VARCHAR(50) NOT NULL,
            password VARCHAR(50) NOT NULL,
            fullname VARCHAR(50)
        )";
    // exec() dan foydalaning, chunki hech qanday natija qaytmaydi
    $conn->exec($sql);
    echo "Jadval muvaffaqiyatli yaratildi <br/>";
}
catch(PDOException $e)
{
    echo $sql . "<br/>" . $e->getMessage();
}

//  MySQL serverdan uzish
$conn = null;

?>

Ma'lumotni ro'yhatga kiritish

Ro'yhat yaratilishi bilanoq, keyingi qadam uni ichiga ma'lumot kiritish bo'ladi. Ro'yhatga ma'lumot kiritish uchun biz quyidagi maxsus qoidalarga rioya qilishimiz kerak:

  • Agar kiritiladigan qiymat satr bo'lsa, u holda biz uni qo'shtirnoqqa olishimiz kerak bo'ladi.
  • Sonli qiymat qo'shtirnoqqa olinmaydi.
  • NULL qo'shtirnoqqa olinmaydi.
  • Agar jadvaldagi ustun AUTO_INCREMENT bo'lsa, unda biz ushbu jadvalga ma'lumotlarni kiritishimiz shart emas, u avtomatik ravishda jadvalga kiritiladi.

SQL so'rov shunday bo'ladi:

// ro'yhatga ma'lumot kiritish uchun sql so'rov
$sql = "INSERT INTO User (email, password, fullname)
        VALUES ('[email protected]', 'IKilledBoogieMan', 'John Wick')";   

Biz qiladigan ish yuqoridagi so'rovga $sql o'zgaruvchisining qiymatini almashtirish va qolgan kod shundayligicha qoladi, xuddi baza va ro'yhat yaratish kabi.

Ro'yhatdan ma'lumotni o'chirish

Yuqorida insert SQL buyrug'ini bajarganimizdek, biz ro'yhatdan ma'lumotni delete SQL buyru'gi orqali o'chirishimiz ham mumkin:

// ro'yhat ichidagi ma'lumotni o'chirish
$sql = "DELETE FROM User WHERE userid=1";    

Qolgan to'liq kod qanday bo'lsa shunday qoladi.

Ro'yhatdan ma'lumotni tanlash

Ro'yhatdan ma'lumotni tanlash boshqa jarayonlarga qaraganda ozgina farq qiladi. Agar biz ro'yhatdan bir necha ma'lumotlar qatorini tanlashimiz kerak bo'lsa, unda biz siklda fetch() metodini ishlatishimiz kerak.

Keling, User table-dagi ma'lumotlarni qaytarishimiz uchun namuna ko'ramiz:

// User table-da ma'lumotni tanlash uchun sql so'rov 
$stmt = $conn->prepare("SELECT userid, email, fullname FROM User"); 
// ma'lumotni saqlash uchun massiv e'lon qilish
$data = array();
// sql buyrug'ini bajarish
$stmt->execute();
// barcha qatorlarni olish uchun siklga qo'ydik
while($row = $stmt->fetch(PDO::FETCH_OBJ)) 
{
    $data[] = $row;
}

// aloqani yopish
$conn = null;
// ma'lumotni qaytarish
return $data;