PHP MySqli bilan ishlash asoslari. Php da ma'lumotlar bazasi bilan ishlash MySQL php ma'lumotlar bazasiga ulanish
PHP TOOLS BILAN MySQL MA'LUMOTLAR BAZASI BILAN ISHLASH
Leksiya. Tayyorlagan Proxorov V.S.
1. PHP SCENARIOSLARINI MySQL jadvallari bilan ulatish
PHP yordamida MySQL ma'lumotlar bazasi bilan ishlash imkonini beruvchi eng ko'p ishlatiladigan funksiyalarni ko'rib chiqamiz.
PHP va MySQL o'zaro aloqada bo'lganda, dastur ma'lumotlar bazasi ma'lumotlar bazasi bilan funktsiyalar to'plami orqali o'zaro ta'sir qiladi.
1.1 Serverga ulanish. Funktsiya mysql_connect
Ma'lumotlar bazasi bilan ishlashdan oldin siz u bilan tarmoq ulanishini o'rnatishingiz, shuningdek foydalanuvchini avtorizatsiya qilishingiz kerak. Buning uchun mysql_connect() funksiyasidan foydalaniladi.
resurs mysql_connect(]])
Bu funktsiya xost $serverida joylashgan MySQL ma'lumotlar bazasiga tarmoq ulanishini o'rnatadi (sukut bo'yicha bu localhost, ya'ni joriy kompyuter) va ochiq ulanish identifikatorini qaytaradi. Barcha keyingi ishlar ushbu identifikator bilan amalga oshiriladi. Ushbu identifikatorni (tutqichni) argument sifatida qabul qiladigan barcha boshqa funktsiyalar tanlangan ma'lumotlar bazasini noyob tarzda aniqlaydi. Ro'yxatdan o'tishda foydalanuvchi nomini ko'rsating $username va $password (sukut bo'yicha, joriy jarayon ishlayotgan foydalanuvchi nomi - skriptlarni disk raskadrovka qilishda: root va bo'sh parol):
$dbpasswd = ""; //Parol
//Ogohlantirishni ko'rsatish
echo("
Р>");
$dblocation, $dbuser va $dbpasswd o'zgaruvchilari server nomi, foydalanuvchi nomi va parolni saqlaydi.
1.2 Serverdan uzilish. Funktsiya mysql_close
MySQL serveriga ulanish skript tugallanganda yoki mysql_close funksiyasi chaqirilganda avtomatik ravishda yopiladi.
bool mysql_close()
Ushbu funktsiya MySQL serveriga ulanishni yopadi va agar operatsiya muvaffaqiyatli bo'lsa, "true", aks holda "false" qiymatini qaytaradi. Funktsiya argument sifatida mysql_connect funktsiyasi tomonidan qaytarilgan ma'lumotlar bazasiga ulanish dastagini oladi.
$dblocation = "localhost"; //Server nomi
$dbuser = "root"; //Foydalanuvchi nomi
$dbpasswd = ""; //Parol
//Ma'lumotlar bazasi serveriga ulaning
//Funktsiyani chaqirishdan oldin @ belgisi bilan xato chiqishini bostirish
$dbcnx = @ mysql_connect ($dblocation, $dbuser, $dbpasswd);
agar (!$dbcnx) //Agar deskriptor 0 bo'lsa, ulanish o'rnatilmagan
//Ogohlantirishni ko'rsatish
echo("
Ma'lumotlar bazasi serveri hozirda mavjud emas, shuning uchun sahifani to'g'ri ko'rsatib bo'lmaydi.Р>");
agar (mysql_close($dbcnx)) // ulanishni yoping
echo("Ma'lumotlar bazasi ulanishi tugatildi");
echo("Ulanishni yakunlay olmadik");
1.3 Ma'lumotlar bazasini yaratish. MA'LUMOTLAR BAZASI funksiyasini yaratish
Buyruq - ma'lumotlar bazasini yaratish faqat server ma'muri uchun mavjud va ko'pgina hosting saytlarida uni bajarib bo'lmaydi:
MA'LUMOTLAR BAZASIMa'lumotlar bazasi nomini yaratish
DatabaseName nomli yangi ma'lumotlar bazasini yaratadi.
Ushbu funktsiya bilan ishlashga misol:
@mysql_query("ma'lumotlar bazasini yaratish $dbname");
Hamma joyda apostroflardan (“SQL – buyruq”) SQL – buyruqlarini o‘z ichiga olgan qatorlar uchun chegaralovchi sifatida foydalanish tavsiya etiladi. Bu hech qanday $ o'zgaruvchisi tasodifan interpolyatsiya qilinmasligini ta'minlaydi (ya'ni uning qiymati bilan almashtiriladi) va skript xavfsizligini oshiradi.
CREATE DATABASE ma'lumotlar bazasini yaratish buyrug'i faqat superfoydalanuvchi uchun mavjud va ko'pchilik xosting saytlarida uni oddiy foydalanuvchi bajarishi mumkin emas. U faqat server ma'muri uchun mavjud.
Tajribalar uchun buyruq satridan SQL so'rovini bajarish orqali test bazasi ma'lumotlar bazasini yaratamiz. Buning uchun siz MySQL-ga kirishingiz va MySQL buyruq qatoriga kirishingiz kerak:
mysql> ma'lumotlar bazasi test bazasini yaratish;
Shundan so'ng siz quyidagilarni yozishingiz kerak:
mysql>test bazasidan foydalaning;
Ma'lumotlar bazasi yaratilgan:
1.4 Ma'lumotlar bazasini tanlash. Funktsiya mysql_select_db
MySQL serveriga birinchi so'rovni yuborishdan oldin biz qaysi ma'lumotlar bazasi bilan ishlashimizni ko'rsatishimiz kerak. mysql_select_db funktsiyasi buning uchun mo'ljallangan:
bool mysql_select_db(string $ma'lumotlar bazasi_name [,resurs $link_identifier])
U PHP ga kelgusida $link_identifier ulanishidagi operatsiyalar $database_name ma'lumotlar bazasidan foydalanishi haqida xabar beradi.
Ushbu funktsiyadan foydalanish SQL so'rovida use buyrug'ini chaqirishga tengdir, ya'ni mysql_select_db funktsiyasi keyingi ish uchun ma'lumotlar bazasini tanlaydi va barcha keyingi SQL so'rovlari tanlangan ma'lumotlar bazasiga qo'llaniladi. Funktsiya argument sifatida tanlangan ma'lumotlar bazasi nomini va ulanish identifikatori manbasini oladi. Agar operatsiya muvaffaqiyatli bajarilgan bo'lsa, funktsiya "true", aks holda "false" qiymatini qaytaradi:
//Ma'lumotlar bazasiga ulanish kodi
agar (! @mysql_select_db($dbname, $dbcnx))
//Ogohlantirishni ko'rsatish
echo("
Ma'lumotlar bazasi hozirda mavjud emas, shuning uchun sahifani to'g'ri ko'rsatib bo'lmaydi.Р>");
1.5 Xatolarni hal qilish
Agar MySQL bilan ishlashda xatolar yuzaga kelsa (masalan, so'rovdagi qavslar muvozanatlanmagan yoki parametrlar etarli bo'lmasa), unda xato xabari va uning raqamini quyida tavsiflangan ikkita funktsiya yordamida olish mumkin.
Ushbu funktsiyalardan ehtiyotkorlik bilan va tezda foydalanish muhim, chunki aks holda skriptlarni tuzatish qiyinlashishi mumkin.
● Funktsiya:
int mysql_errno()
oxirgi xabar qilingan xato raqamini qaytaradi. Agar skriptning bajarilishi davomida faqat bitta ulanish o'rnatilgan bo'lsa, $link_identifier ulanish identifikatorini o'tkazib yuborish mumkin.
● Funktsiya:
string mysql_error()
raqamni emas, balki xato xabari matnini o'z ichiga olgan qatorni qaytaradi. Nosozliklarni tuzatish uchun foydalanish qulay. Odatda mysql_error yoki die() konstruktsiyasi bilan birga ishlatiladi, masalan:
@mysql_connect("localhost", "foydalanuvchi", "parol")
or die("Ma'lumotlar bazasiga ulanishda xatolik: ".mysql_error());
@ operatori, odatdagidek, xatolik yuz berganda paydo bo'lishi mumkin bo'lgan standart ogohlantirishni bostirish uchun xizmat qiladi.
PHP ning so'nggi versiyalarida MySQL funksiyalaridagi ogohlantirishlar sukut bo'yicha qayd etilmaydi.
1.6 MySQL ga ulanishni avtomatlashtirish. Fayl ( config.php )
Odatda, saytda bir xil ma'lumotlar bazasiga kirish kerak bo'lgan bir nechta skriptlar mavjud.
MySQL-ga ulanish uchun mas'ul bo'lgan kodni alohida faylga ajratish tavsiya etiladi, so'ngra uni kiritish funktsiyasidan foydalanib kerakli skriptlarga ulash tavsiya etiladi.
Server nomi $dblocation, foydalanuvchi nomi $dbuser, parol $dbpasswd va maʼlumotlar bazasi nomi $dbname boʻlgan oʻzgaruvchilar eʼlon qilingan bitta faylga (config.php) maʼlumotlar bazasini ulash, tanlash va yaratish funksiyalarini joylashtirish mantiqan.
config.php ro'yxati:
serverga ulanish va ma'lumotlar bazasini tanlash parametrlarini o'z ichiga olgan faylning //config.php kodi
// brauzerga ulanish xato xabarlarini chiqaradi
$dblocation = "localhost"; //Server nomi
$dbname = "ma'lumotlar bazasi nomini kiriting" //Ma'lumotlar bazasi nomi: yaratilmoqda yoki mavjud
$dbuser = "root"; //Ma'lumotlar bazasi foydalanuvchi nomi
$dbpasswd = ""; //Parol
//Ma'lumotlar bazasi serveriga ulaning
//Funktsiyani chaqirishdan oldin @ belgisi bilan xato chiqishini bostirish
$dbcnx=@mysql_connect($dblocation,$dbuser,$dbpasswd);
agar (!$dbcnx) //Agar deskriptor 0 bo'lsa, ma'lumotlar bazasi serveriga ulanish o'rnatilmagan.
//Ogohlantirishni ko'rsatish
echo("
Ma'lumotlar bazasi serveri hozirda mavjud emas, shuning uchun sahifani to'g'ri ko'rsatib bo'lmaydi.
");//$dbname ma'lumotlar bazasini yarating - buni faqat superfoydalanuvchi qila oladi
//Agar ma'lumotlar bazasi allaqachon mavjud bo'lsa, halokatli bo'lmagan xato bo'ladi
@mysql_query("Agar $dbname mavjud bo'lmasa, MA'LUMOTLAR BAZASINI YARATING");
//Ma'lumotlar bazasiga ulanish kodi: biz yangi yaratilgan ma'lumotlar bazasini yoki allaqachon mavjud ma'lumotlar bazasini aniq tanlaymiz.
//Funktsiyani chaqirishdan oldin @ belgisi bilan xato chiqishini bostirish
if(!@mysql_select_db($dbname, $dbcnx)) //Agar deskriptor 0 boʻlsa, maʼlumotlar bazasiga ulanish oʻrnatilmagan.
//Ogohlantirishni ko'rsatish
echo("
Ma'lumotlar bazasi hozirda mavjud emas, shuning uchun sahifani to'g'ri ko'rsatib bo'lmaydi.
");//Xabarni chop etuvchi kichik yordamchi funksiya
//ma'lumotlar bazasi so'rovida xatolik yuzaga kelganda xato xabari
puterror funktsiyasi ($xabar)
echo("");
2. MA'LUMOTLAR BAZASI SO'ROVLARINI BAJARISH
2.1 Jadval yaratish. Funktsiya JADVAL TUZISH:
JADVAL YARATISH Jadval nomi (maydon nomi turi, maydon nomi turi,)
Ushbu buyruq ma'lumotlar bazasida ularning nomlari (FieldName) va ko'rsatilgan turlari bo'yicha aniqlangan ustunlar (maydonlar) bilan yangi jadval yaratadi. Jadvalni yaratgandan so'ng, unga ushbu buyruqda ko'rsatilgan maydonlardan iborat yozuvlarni qo'shishingiz mumkin.
Roʻyxat test_11.php. Ma'lumotlar bazasida yangi jadval yaratuvchi dastur:
"config.php" ni o'z ichiga oladi;//Serverga ulaning va ma'lumotlar bazasini tanlang
mysql_query("Agar odamlar bo'lmasa, JADVAL YORING
id INT AUTO_INCREMENT ASOSIY KEY,
or die("MySQL xatosi: ".mysql_error());
Ushbu skript ikkita maydonga ega yangi odamlar jadvalini yaratadi. Birinchi maydonda INT turi (integer) va nom identifikatori mavjud. Ikkinchisi TEXT turi (matn qatori) va nom nomi.
Agar jadval mavjud bo'lsa, yoki die() konstruktsiyasi ishlaydi.
Agar ixtiyoriy if not exists bandi belgilangan bo'lsa, MySQL serveriga ma'lumotlar bazasida ko'rsatilgan nomga ega jadval allaqachon mavjud bo'lsa, xato xabari yaratmasligi kerakligini aytadi.
2011 yilda PHP MySQL-ni qo'llab-quvvatlash tugashi munosabati bilan PDO yoki MySqli. Ular (MySQL-dan ko'ra) yaxshiroq funksionallikka ega va OOP (ob'ektga yo'naltirilgan interfeys) API taklif qiladi. Qaysi biri yaxshiroq - bu boshqa maqola uchun mavzu, ushbu maqolada biz MySqli bilan ishlash asoslarini tushunishga harakat qilamiz. Shuning uchun, keling, ko'proq cho'zmasdan, PHP MySqli yordamida yozuvlarni (ma'lumotlar/hujjatlar/ma'lumotlar) ulash, tanlash, kiritish, yangilash va o'chirishni ko'rib chiqishga o'tamiz. Umid qilamanki, ushbu maqola PHP MySqli bilan ishlashda yuzaga kelishi mumkin bo'lgan muammolarni hal qilishda foydali bo'ladi.
MySqli o'rnatilmoqda
PHP 5.3.0+ versiyasidan foydalanilganda MySqli sukut bo'yicha mavjud; eski versiyalar uchun uni mavjud qilish uchun fayl ichiga php_mysqli.dll DLL qo'shishingiz kerak. php.ini va kengaytma=php_mysqli.dll qatoriga izohni olib tashlash orqali php.ini tahrirlang. Linuxda PHP5 mysql paketini o'rnatganingizda MySQLIi avtomatik ravishda o'rnatiladi. Windows va Linux tizimlarida o'rnatish haqida batafsil ma'lumotni topishingiz mumkin.
Ma'lumotlar bazasiga ulanish
MySqli ma'lumotlar bazasiga ulanishning ikkita usulini taklif qiladi: protsessual va ob'ektga yo'naltirilgan. Ob'ektga yo'naltirilgandan foydalanish tavsiya etiladi. Protsessual (eski) MySql ga o'xshaydi, shuning uchun u yangi boshlanuvchilar uchun afzalroq bo'lishi mumkin, lekin tavsiya etilmasligini yodda tutish kerak.
PHP
//protsessual uslub $mysqli = mysqli_connect("host", "foydalanuvchi nomi", "parol", "ma'lumotlar bazasi_nomi"); //ob'ektga yo'naltirilgan uslub (tavsiya etiladi) $mysqli = new mysqli("xost", "foydalanuvchi nomi", "parol", "ma'lumotlar bazasi_nomi");Quyida ma'lumotlar bazasiga ulanishni ob'ektga yo'naltirilgan usulda ochish ko'rsatilgan. Ushbu usul quyidagi barcha misollarda qo'llaniladi.
PHP
connect_error) ( die("Xato: (". $mysqli->connect_errno.") ". $mysqli->connect_error); ) ?>Olingan qatorni assotsiativ massiv sifatida tanlash (tanlash).
mysqli_fetch_assoc() : Quyidagi kod natijalar qatorini assotsiativ massiv sifatida oladi. Qaytarilgan massiv ma'lumotlar bazasidan olingan qatorlarni o'z ichiga oladi, bu erda ustun nomlari ichki ma'lumotlarga kirish uchun ishlatiladigan kalit bo'ladi. Quyida ko'rsatilganidek, ma'lumotlar HTML jadvali sifatida ko'rsatiladi.
PHP
connect_error) ( die("Xato: (". $mysqli->connect_errno.") ". $mysqli->connect_error); ) //MySqli so'rovini tanlash $results = $mysqli->".$satr["id"]." | "; chop etish "".$satr["mahsulot_kodi"]." | "; chop etish "".$satr["mahsulot_nomi"]." | "; chop etish "".$satr["mahsulot_dec"]." | "; chop etish "".$row["price"]." | "; chop etish "
Olingan qatorni massiv sifatida tanlash (tanlash) (assotsiativ, oddiy yoki ikkalasi)
fetch_array() funktsiyasi: mysqli_fetch_row va mysqli_fetch assoc funksiyalarining birlashgan funksiyasiga ega massivni qaytaradi. Bu funktsiya mysqli_fetch_row() funksiyasining kengaytirilgan versiyasidir; Ma'lumotlarga kirish uchun satr yoki raqamlardan foydalanishingiz mumkin.
PHP
connect_error) ( die("Xato: (". $mysqli->connect_errno.") ". $mysqli->connect_error); ) //MySqli-ni tanlash so'rovi $results = $mysqli->query("SELECT id, product_code, product_desc) , narxlari FROM mahsulotlar"); chop etish "".$satr["id"]." | "; chop etish "".$satr["mahsulot_kodi"]." | "; chop etish "".$satr["mahsulot_nomi"]." | "; chop etish "".$satr["mahsulot_dec"]." | "; chop etish "".$row["price"]." | "; chop etish "
Natijalar qatorini obyekt sifatida tanlash (tanlash).
fetch_object() : Natijani ob'ekt sifatida olish uchun siz MySqli fetch_object() dan foydalanishingiz kerak. Ob'ektning atributlari natijalar to'plamida topilgan maydonlarning nomlarini ko'rsatadi.
PHP
connect_error) ( die("Xato: (". $mysqli->connect_errno.") ". $mysqli->connect_error); ) //MySqli-ni tanlash so'rovi $results = $mysqli->query("SELECT id, product_code, product_desc) , narxlari FROM mahsulotlar"); chop etish "".$row->id." | "; chop etish "".$satr->mahsulot_kodi." | "; chop etish "".$satr->mahsulot_nomi." | "; chop etish "".$satr->mahsulot_dec." | "; chop etish "".$ qator->narx." | "; chop etish "
Bitta qiymatni tanlash (tanlash).
Fetch_object (Cameron Spear usuli) yordamida ma'lumotlar bazasidan bitta qiymatni olish mumkin.
PHP
connect_error) ( die("Xato: (". $mysqli->connect_errno.") ". $mysqli->connect_error); ) //zamanlangan PHP funksiyalari $product_name = $mysqli->query("mahsulot_nomini QAYERDA identifikatordan tanlang. = 1")->fetch_object()->mahsulot_nomi; $product_name; //chiqish qiymati $mysqli->close(); ?>Jadvaldagi qatorlar soni olinmoqda (SELECT COUNT).
Ba'zan jadvaldagi qatorlar sonini bilishingiz kerak, ayniqsa sahifalarni raqamlashda.
PHP
connect_error) ( die("Xato: (". $mysqli->connect_errno.") ". $mysqli->connect_error); ) //yozuvlarning umumiy sonini olish $results = $mysqli->query("COUNT SELECT(*) ) FROM foydalanuvchilar"); $get_total_rows = $results->fetch_row(); // jami yozuvlarni $mysqli->close() oʻzgaruvchisida saqlang; ?>Tayyorlangan bayonotlar yordamida SELECT
tayyorlangan bayonotlar- bir xil shablon bo'yicha tuzilgan takroriy so'rovlarning ketma-ket bajarilishini tezlashtirishga imkon beruvchi maxsus DBMS vositasi.
MySqli-ning xususiyatlaridan biri allaqachon yozilgan shablonlardan foydalanish imkoniyatidir: ya'ni so'rovni faqat bir marta yozish kerak, shundan so'ng uni turli parametrlar bilan ko'p marta bajarish mumkin. Oldindan yozilgan shablonlardan foydalanish katta jadvallar va murakkab so'rovlar uchun ish faoliyatini yaxshilaydi. Zararli kodni kiritishning oldini olish uchun har bir so'rov server tomonidan alohida tahlil qilinadi.
Quyidagi kod ma'lumotlar bazasidan ma'lumotlarni olish uchun shablondan (tayyorlangan bayonot) foydalanadi. Agregat ? SQL so'rovida u marker vazifasini bajaradi va parametr bilan almashtiriladi, bu esa o'z navbatida satr, butun son, juft yoki blob bo'lishi mumkin. Bizning holatlarimizda bu $search_product qatori.
PHP
$search_product = "PD1001"; //mahsulot identifikatori //tayyorlangan bayonot yarating $query = "Tanlash identifikatori, mahsulot_kodi, mahsulot_dec, QAYERDA mahsulot_kodi=?"; $statement = $mysqli->tayyorlash($query); //markerlar uchun bog'lash parametrlari, bu erda (s = string, i = integer, d = double, b = blob) $statement->bind_param("s", $search_product); //so'rovni bajarish $statement->execute(); //natija o'zgaruvchilarini bog'lash $statement->".$id." | "; chop etish "".$mahsulot_kodi." | "; chop etish "".$product_desc." | "; chop etish "".$narxi." | "; chop etish "
Bir nechta parametrlar bilan bir xil so'rov:
PHP
$search_ID = 1; $search_product = "PD1001"; $query = "ID, mahsulot_kodi, mahsulot_dec, ID=? VA mahsulot_kodi= bo'lgan mahsulotlardan narxni tanlang?"; $statement = $mysqli->tayyorlash($query); $statement->bind_param("is", $search_ID, $search_mahsulot); $statement->execute(); $statement->bog'lash_natijasi($id, $mahsulot_kodi, $mahsulot_dec, $narx); chop etish "".$id." | "; chop etish "".$mahsulot_kodi." | "; chop etish "".$product_desc." | "; chop etish "".$narxi." | "; chop etish "
Yozuv qo'shing
Quyidagi yozuv jadvalga yangi qator qo'shadi.
PHP
real_escape_string("P1234")."""; $product_name = """.$mysqli->real_escape_string("42 dyuymli televizor")."""; $product_price = """.$mysqli->real_escape_string("600) ")."""; //MySqli Insert Query $insert_row = $mysqli->query("INSERT INTO mahsulotlar (mahsulot_kodi, mahsulot_nomi, narx) VALUES($mahsulot_kodi, $mahsulot_narxi)" )( chop "); Oxirgi kiritilgan yozuvning identifikatori muvaffaqiyatli: " .$mysqli->insert_id .""; )else( die("Xato: (". $mysqli->errno .") ". $mysqli->xato); ) ?>
Quyidagi parcha tayyor bayonotlar yordamida bir xil ma'nolarni kiritadi. Yuqorida aytib o'tganimizdek, andozalar SQL in'ektsiyasiga qarshi juda samarali. Berilgan misol uchun ulardan foydalanish eng yaxshi variant hisoblanadi.
PHP
//ma'lumotlar bazasi jadvaliga kiritiladigan qiymatlar $product_code = "P1234"; $product_name = "42 dyuymli televizor"; $mahsulot_narxi = "600"; $query = "Mahsulotlarni (mahsulot_kodi, mahsulot_nomi, narxi) VALUES (?, ?, ?) INSERT INTO"; $statement = $mysqli->tayyorlash($query); //markerlar uchun bog'lash parametrlari, bu erda (s = string, i = integer, d = double, b = blob) $statement->bind_param("sss", $mahsulot_kodi, $mahsulot_nomi, $mahsulot_narxi); if($statement->execute())( "Muvaffaqiyatli! Oxirgi kiritilgan yozuvning identifikatori: " .$statement->insert_id ”ni chop eting."; )else( die("Xato: (". $mysqli->errno .") ". $mysqli->xato); ) $statement->close();
Bir nechta yozuvlarni QO'ShIRING
Bir vaqtning o'zida bir nechta satrlarni kiritish ustun qiymatlari qatorini kiritish orqali amalga oshiriladi, har bir qiymat qatori qavslar bilan o'ralgan va boshqalardan vergul bilan ajratilgan. Ba'zan siz qancha yozuvlar kiritilgan, yangilangan yoki o'chirilganligini bilib olishingiz kerak, buning uchun mysqli_affected_rows dan foydalanishingiz mumkin.
PHP
//mahsulot 1 $product_code1 = """.$mysqli->real_escape_string("P1")."""; $product_name1 = """.$mysqli->real_escape_string("Google Nexus")."""; $product_price1 = """.$mysqli->real_escape_string("149")."""; //mahsulot 2 $product_code2 = """.$mysqli->real_escape_string("P2")."""; $product_name2 = """.$mysqli->real_escape_string("Apple iPad 2")."""; $product_price2 = """.$mysqli->real_escape_string("217")."""; //mahsulot 3 $product_code3 = """.$mysqli->real_escape_string("P3")."""; $product_name3 = """.$mysqli->real_escape_string("Samsung Galaxy Note")."""; $product_price3 = """.$mysqli->real_escape_string("259")."""; //Bir nechta qatorlarni kiritish $insert = $mysqli->query("INSERT INTO mahsulotlar (mahsulot_kodi, mahsulot_nomi, narx) VALUES ($mahsulot_kodi1, $mahsulot_nomi1, $mahsulot_narxi1), ($mahsulot_kodi2, $mahsulot_nomi2, $mahsulot_narxi2), ($ mahsulot_kodi3, $mahsulot_nomi3, $mahsulot_narxi3)"); if($insert)( //mysqli_affected_rows yordamida jami kiritilgan yozuvlarni qaytarish "Muvaffaqiyat! Jami " .$mysqli->affected_rows ." qatorlari qo'shildi."; )else( die("Xato: (". $mysqli->errno .") ". $mysqli->xato); )
Yozuvlarni yangilash/oʻchirish
Yozuvlarni yangilash va o'chirish printsipi bir xil. So'rovlar qatorini MySql-ni yangilash yoki o'chirish bilan almashtirish kifoya (men tushunmadim, o'zingiz ko'ring).
PHP
//MySqli yangilash so'rovi $results = $mysqli->query("Yangilanish mahsulotlari SET product_name="52 dyuymli televizor", product_code="323343" WHERE ID=24"); //MySqli so'rovini o'chirish //$results = $mysqli->query("ID=24 QAYERDAGI mahsulotlardan o'chirish"); if($results)( "Muvaffaqiyatli! yozuv yangilandi/oʻchirildi"ni chop eting; )else( "Xato: (". $mysqli->errno .") ". $mysqli->xato; )Tayyorlangan bayonotlar yordamida yangilang
Tayyorlangan bayonotlar yordamida yozuvni yangilash misoli quyida ko'rsatilgan.
PHP
$product_name = "52 dyuymli televizor"; $mahsulot_kodi = "9879798"; $find_id = 24; $query = "Mahsulotlarni YANGILASH SET product_name=?, product_code=? WHERE ID=?"; $statement = $mysqli->tayyorlash($query); //markerlar uchun bog'lash parametrlari, bu erda (s = string, i = integer, d = double, b = blob) $results = $statement->bind_param("ssi", $product_name, $product_code, $find_id); if($results)( "Muvaffaqiyat! Yozuv yangilandi" chop etish; )else( "Xato: (". $mysqli->errno .") ". $mysqli->xato; )Eski yozuvlarni o'chirish
Serverda 1 kundan ortiq bo'lgan barcha yozuvlar o'chiriladi; Siz kunlar sonini o'zingiz belgilashingiz mumkin.
PHP
//MySqli so'rovini o'chirish $results = $mysqli-Shubhasiz, MySqli standart MySql PHP kengaytmasidan sezilarli darajada yaxshiroq, garchi ularning ishlash tamoyillari juda o'xshash. Umid qilamanki, yuqoridagi ma'lumotlar kelajakda loyihalarni yaratish va ko'chirishda foydali bo'ladi. Qulaylik uchun misol fayllarini yuklab olish imkoniyati quyida amalga oshirildi. Buni yuklab olish tugmasini bosish orqali amalga oshirish mumkin.
MySQL - relyatsion ma'lumotlar bazasi turi. MySQL turli xil foydalanuvchilar ulanishi mumkin bo'lgan serverdir.
Internetga ulansangiz, foydalanuvchi nomingiz va parolingizni, shuningdek, ulanayotgan server nomini kiritasizmi? MySQL bilan ishlashda xuddi shu tizimdan foydalaniladi.
Yana bir narsa: relyatsion ma'lumotlar bazasi nima? Jadvallar asosidagi relyatsion vositalar. Microsoft-ning mashhur elektron jadval muharriri Excel, aslida relyatsion ma'lumotlar bazasi muharriri.
MySQL serveriga ulanish
PHP da MySQL serveriga ulanish uchun mysqli_connect() funksiyasidan foydalaning. Bu funksiya uchta argumentni oladi: server nomi, foydalanuvchi nomi va parol.
Mysqli_connect() funktsiyasi ulanish identifikatorini qaytaradi, u o'zgaruvchida saqlanadi va keyinchalik ma'lumotlar bazalari bilan ishlash uchun ishlatiladi.
MySQL server ulanish kodi:
$link = mysqli_connect("localhost", "root", "");
Bunday holda, men Denwere-da mahalliy mashinada ishlayapman, shuning uchun xost nomi localhost, foydalanuvchi nomi root va parol yo'q.
MySQL bilan ishlashni tugatgandan so'ng ulanish ham yopilishi kerak. Ulanishni yopish uchun mysqli_close() funksiyasidan foydalaniladi. Keling, misolni kengaytiraylik:
$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Xato"); mysqli_close($link);
Bu erda biz ulanish identifikatorini haqiqatni tekshirdik; agar ulanishimizda biror narsa noto'g'ri bo'lsa, u holda dastur bajarilmaydi, die() funktsiyasi o'z bajarilishini to'xtatadi va brauzerda xato xabarini ko'rsatadi.
Ulanish xatolari
Ulanishni tekshirish uchun quyidagi funktsiyalardan foydalaniladi:
- mysqli_connect_errno() - oxirgi ulanish urinishining xato kodini qaytaradi. Hech qanday xato bo'lmasa, nolni qaytaradi.
- mysqli_connect_error() - MySQL serveriga oxirgi ulanish xatosining tavsifini qaytaradi.
mysqli_get_host_info() funksiyasi foydalanilayotgan ulanish turini o'z ichiga olgan qatorni qaytaradi.
Shuni ham yodda tutingki, belgilash buyrug'idan foydalanib, barcha ulanish parametrlarini doimiylar sifatida saqladim. Katta loyihalarni yozganingizda va MySQL serveriga ulanadigan ko'plab fayllar mavjud bo'lsa, ulanish parametrlarini alohida faylda saqlash va uni kiritish yoki talab funksiyasidan foydalanib kiritish qulay.
Ma'lumotlar bazasini tanlash
MySQL serveri bir nechta ma'lumotlar bazasiga ega bo'lishi mumkin. Avvalo, biz ishlashimiz kerak bo'lgan bazani tanlashimiz kerak. PHP da buning uchun mysqli_connect() funksiyasida yana bir parametr mavjud - ma'lumotlar bazasi nomi.
Men uni kompyuterimda phpMyAdmin orqali tester nomi bilan yaratdim. Keling, u bilan bog'lanamiz:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Xato"); mysql_close($link);
Shunday qilib, biz ishlash uchun ma'lumotlar bazasini tanladik. Ammo biz bilganimizdek, relyatsion ma'lumotlar bazasi jadvallardan iborat va bizning ma'lumotlar bazasida hali jadvallar mavjud emas. Ma'lumotlar bazasi bo'sh, jadvallarsiz yaratilgan. Jadvallar unga alohida qo'shilishi kerak. Endi unga PHP yordamida jadval qo'shamiz.
Jadval yarating
MySQL ma'lumotlar bazalari nomida SQL qismi tuzilgan so'rovlar tili sifatida tarjima qilingan Strukturalangan so'rovlar tilini anglatadi. Biz so'rovlarni SQL da yozamiz va ularni PHP dasturidan MySQL serveriga yuboramiz.
Jadval yaratish uchun biz faqat CREATE TABLE buyrug'ini berishimiz kerak. Keling, foydalanuvchilarning loginlari (login ustuni) va parollari (parol ustuni) saqlanadigan ustunlarida foydalanuvchilar deb nomlangan jadval yaratamiz.
$query = "JADVAL YARATISH foydalanuvchilar (login VARCHAR(20), parol VARCHAR(20))";
Ushbu kodda biz $query o'zgaruvchisiga SQL so'rovini ifodalovchi matn qatorini tayinladik. Biz VARCHAR(20) ma'lumotlar turidagi ikkita ustundan iborat login va parolni o'z ichiga olgan foydalanuvchilar deb nomlangan jadval yaratamiz. Ma'lumotlar turlari haqida keyinroq gaplashamiz, hozircha men VARCHAR(20) maksimal uzunligi 20 belgidan iborat bo'lgan satr ekanligini ta'kidlayman.
So'rovimizni MySQL serveriga yuborish uchun biz PHP funktsiyasidan foydalanamiz mysqli_query(). Agar operatsiya muvaffaqiyatli bajarilgan bo'lsa, bu funktsiya ijobiy raqamni qaytaradi va xatolik yuzaga kelgan bo'lsa, noto'g'ri raqamni qaytaradi (so'rov sintaksisi noto'g'ri yoki dastur so'rovni bajarish uchun ruxsatga ega emas).
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Xato"); $query = "JADVAL YARATISH foydalanuvchilar (login VARCHAR(20), parol VARCHAR(20))"; mysqli_query($query); mysqli_close($link);
SQL so'rovini o'zgaruvchiga yozish shart emas; uni to'g'ridan-to'g'ri mysql_query() funksiyasiga argument sifatida yozish mumkin. Bu shunchaki kodni o'qilishi mumkin bo'lgan qiladi.
Ushbu skriptning bitta kamchiligi bor - u brauzerga hech narsa chiqarmaydi. Keling, xabar qo'shamiz:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Xato"); $query = "JADVAL YARATISH foydalanuvchilar (login VARCHAR(20), parol VARCHAR(20))"; if (mysqli_query($query)) echo "Jadval yaratildi."; else echo "Jadval yaratilmadi."; mysqli_close($link);
Agar biz ushbu skriptni qayta ishga tushirsak, brauzerda "Jadval yaratilmagan" degan xabarni ko'ramiz. Gap shundaki, jadval birinchi ishga tushirish vaqtida yaratilgan va yana bir xil nomdagi jadval yaratish mumkin emas. Biz xatolik holatiga duch keldik, shuning uchun MySQL bilan ishlashda xatolarni qayta ishlash haqida gapirish vaqti keldi.
Qayta ishlashda xato
Dasturni disk raskadrovka qilishda bizga xato haqida aniq ma'lumot kerak bo'lishi mumkin. MySQL-da xatolik yuz berganda, ma'lumotlar bazasi serveri xato raqamini va uning tavsifi bilan chiziqni o'rnatadi. PHP ushbu ma'lumotlarga kirish uchun maxsus funktsiyalarga ega.
- mysqli_errno() - xato raqamini qaytaradi.
- mysqli_error() - xatoni tavsiflovchi satrni qaytaradi.
Endi mysql_error() funksiyasini skriptimizga qo'shamiz:
$link = mysql_connect("localhost", "root", "", "tester"); if (!$link) die("Xato"); $query = "JADVAL YARATISH foydalanuvchilar (login VARCHAR(20), parol VARCHAR(20))"; if (mysqli_query($query)) echo "Jadval yaratildi."; else echo "Jadval yaratilmadi: ".mysqli_error(); mysqli_close($link);
Endi bizning skriptimiz brauzerga qatorni qaytaradi: "Jadval yaratilmagan: "foydalanuvchilar" jadvali allaqachon mavjud."
Jadvalni o'chirish
Shunday qilib, endi bizda kerak bo'lmagan stol bor. Ma'lumotlar bazasidan jadvallarni qanday tushirishni o'rganish vaqti keldi.
Jadvalni tushirish uchun DROP TABLE buyrug'idan so'ng jadval nomidan foydalaning.
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Xato"); $query = "JADVAL foydalanuvchilarini DOPLASH"; if (!mysqli_query($query)) echo "Jadvalni oʻchirishda xatolik yuz berdi: ".mysqli_error(); else echo "Jadval o'chirildi."; mysqli_close($link);
Natijalar
Shunday qilib, biz MySQL asoslarini o'zlashtirdik. Biz nima qilishni o'rgandik:
- mysqli_connect() funksiyasidan foydalanib MySQL ma'lumotlar bazasiga ulaning.
- mysqli_close() funksiyasidan foydalanib MySQL serveriga ulanishni yoping.
- mysqli_query() funksiyasidan foydalanib MySQL serveriga SQL so'rovlarini yuboring.
- Biz jadval yaratish uchun SQL so'rovini o'rgandik: jadval yaratish.
- Biz jadvalni o'chirish uchun SQL so'rovini o'rgandik: drop table.
- Biz mysqli_errno() va mysqli_error() funksiyalari yordamida xatolarni qanday hal qilishni o‘rgandik.
Keyin MySQL ma'lumotlar turlarini batafsil ko'rib chiqamiz.
Keyingi darsni o'qing:
4,5 mingMatnda Butunrossiya veb-ustalar klubi tomonidan tuzilgan rasmiy hujjatlarning tarjimasidan foydalaniladi.
Ma'lumotlar bazalari bilan ishlashning barchasi serverga ulanish, ma'lumotlar bazasini tanlash, so'rov yuborish, so'rovni qayta ishlash va ma'lumotlar bazalaridan uzilish bilan bog'liq. Shunday ekan, keling, bu masalani nuqtama-bosqich ko‘rib chiqaylik. Butun matnning ravshanligi uchun mahalliy kompyuterda MySQL server o'rnatilganligini tasavvur qilaylik. U bilan ishlash uchun port standartdir. Ulanish uchun biz “root” foydalanuvchi nomi va “no_one” parolidan foydalanamiz.
Ulanish
Ma’lumotlar bazasiga ulanish “mysql_connect()” funksiyasi yordamida amalga oshiriladi. U uchta parametrdan o'tadi: server nomi (yoki server nomi: ulanish porti), foydalanuvchi nomi va parol. Agar xuddi shu argumentlar bilan "mysql_connect()" ga ikkinchi qo'ng'iroq qilinsa, yangi ulanish o'rnatilmaydi - buning o'rniga allaqachon ochiq ulanishning ulanish identifikatori qaytariladi (ya'ni, xuddi shu ma'lumotlar bazasi bilan ishlash davom etadi). Agar siz faqat bitta ma'lumotlar bazasi bilan ishlayotgan bo'lsangiz, ulanish identifikatorini yaratishingiz shart emas. Skript bajarilishini tugatgandan so'ng, serverga ulanish yopiladi, agar u avvalgi "mysql_close()" chaqiruvi bilan aniq yopilmagan bo'lsa.
Misol: $connect = mysql_connect('localhost', 'root', 'no_one'); Bunday holda, $connect o'zgaruvchisi ulanish identifikatoridir. Agar siz faqat bitta ma'lumotlar bazasi bilan ishlasangiz, kod identifikatorsiz yoziladi: mysql_connect('localhost', 'root', 'no_one');
Ma'lumotlar bazasini tanlash
"mysql_select_db" - MySQL ma'lumotlar bazasini tanlaydi. Bu shuni anglatadiki, serverda bitta emas, balki bir nechta ma'lumotlar bazasi bo'lishi mumkin. Ushbu buyruq bilan biz o'zimizga kerak bo'lganini tanlaymiz (bizning huquqlarimiz bor). Ushbu funktsiyaning parametri ma'lumotlar bazasi nomidir. Shu tarzda tanlangan ma'lumotlar bazasi faollashadi va ma'lum bir identifikator bilan bog'lanadi. Agar ulanish identifikatori aniqlanmagan bo'lsa, u holda ma'lumotlar bazasiga oxirgi ulanish ishlatiladi.
Misol: mysql_select_bd('test', $connect); - bu yerda test - ma'lumotlar bazasi nomi va $connect - ulanish identifikatori. Agar siz faqat bitta ma'lumotlar bazasi bilan ishlasangiz, kod identifikatorsiz yoziladi: mysql_select_bd('test');
So'rov yuborish
mysql_query() ma'lum bir havola identifikatori bilan bog'langan serverda hozirda faol bo'lgan ma'lumotlar bazasiga so'rov yuboradi. Agar ID ko'rsatilmagan bo'lsa, oxirgi ochiq ulanish ishlatiladi. Ushbu funktsiyaning parametri sql so'roviga ega bo'lgan satrdir.
Misol: $tmp=mysql_query("jadvaldan slect *", $connect); - bu buyruq $connect identifikatori ko'rsatgan faol ma'lumotlar bazasidan jadval jadvalining butun mazmunini qaytaradi. Agar siz faqat bitta ma'lumotlar bazasi bilan ishlayotgan bo'lsangiz, kod identifikatorsiz yoziladi: $tmp=mysql_query(“slect * from table”);
So‘rov qayta ishlanmoqda
So'rovlarni qayta ishlash uchun bir nechta funktsiyalar mavjud. So'rovlarni qayta ishlashning u yoki bu usulini tanlash dasturlash uslubi va topshirilgan vazifaga bog'liq. Shuni ham hisobga olish kerakki, turli xil variantlar serverni turli yo'llar bilan "yuklaydi" (ba'zilari juda ko'p, ba'zilari unchalik emas). Keling, ulardan bir nechtasini ko'rib chiqaylik.
mysql_fetch_object - php obyektini qayta ishlash natijasi sifatida qaytaradi. Bu usul ob'ektli dasturlash uchun odatlanganlar uchun yaxshi
Misol: while($result= mysql_fetch_object($tmp)) echo($result->name);
Kod misollari bilan PHP bilan MySQL-ga ulanishning 3 usuli
MySQL ma'lumotlar bazasidan foydalanishni boshlash uchun, avvalo, o'zingizning shaxsiy PHP dasturidan (skript) ushbu MySQL ma'lumotlar bazasiga qanday ulanishni tushunishingiz kerak.
Ushbu maqolada PHP-dan ma'lumotlar bazasiga qanday ulanishni tushuntiruvchi tegishli PHP kod misollari bilan birga quyidagi uchta usul tasvirlangan.
Quyidagi barcha misollar uchun biz mavjud MySQL ma'lumotlar bazasiga ulanamiz. Eslatma: Bu yerda tushuntirilgan hamma narsa MySQL kabi MariaDB bilan ham ishlaydi.
1. Mysqli kengaytmasi yordamida PHP ga ulanish
*mysqli MySQL yaxshilangan degan ma'noni anglatadi
Quyidagi mysqli.php faylini yarating
connect_error) ( die("Xato: ulanib bo'lmadi: " . $conn->connect_error); ) echo "Ma'lumotlar bazasiga ulangan.
"; $result = $conn->query("SELECT id FROM goroda"); echo "Qatorlar soni: $result->num_rows"; $result->close(); $conn->close(); ?> Yuqoridagi kodda:
- mysqli - Bu funktsiya mysqli kengaytmasi yordamida yangi ulanishni boshlaydi. Funktsiya to'rtta argumentni oladi:
- localhost - MySQL ma'lumotlar bazasi ishlayotgan xostning nomi
- nom - ulanish uchun MySQL foydalanuvchi nomi
- pass - mysql foydalanuvchisi uchun parol
- db - ulanish uchun MySQL ma'lumotlar bazasi.
- qvery MySQL so'rovi funktsiyasidir. Ushbu misolda biz shahar ma'lumotlar bazasidan id ustunini tanlaymiz.
- Nihoyat, natijada num_rows o'zgaruvchisi yordamida tanlangan qatorlar sonini ko'rsatamiz. Bundan tashqari, yuqorida ko'rsatilgandek natijani ham, ulanish o'zgaruvchisini ham yopamiz.
Ma'lumotlar bazasiga ulangan. Qatorlar soni: 6 2. PHP MySQL PDO kengaytmasidan ulanish
*PDO qisqartmasi PHP Data Objects degan ma'noni anglatadi
PDO_MYSQL drayveri PHP skriptingizdan MySQL ma'lumotlar bazasiga ulanish uchun PHP tomonidan taqdim etilgan PDO interfeysini amalga oshiradi.
Quyidagi mysql-pdo.php faylini yarating:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Ma'lumotlar bazasiga ulangan.
"; $sql = "Tanlash id FROM goroda"; chop "Identifikator ro'yxati:
"; foreach ($conn->query($sql) $ qator sifatida) ( $row["id"] ni chop eting."
"; ) $conn = null; ) catch(PDOException $err) ( echo "Xato: Ulanib boʻlmadi: " . $err->getMessage(); ) ?> Yuqorida:
- yangi PDO - quyidagi uchta argumentni oladigan yangi PDO ob'ektini yaratadi:
- mysql ulanish qatori: u “mysql:host=localhost;dbname=db” formatida bo'ladi. Yuqoridagi misolda JB localhost-da ishlamoqda va biz JB ma'lumotlar bazasiga ulanyapmiz.
- Ulanish uchun MySQL foydalanuvchi nomi
- Mysql foydalanuvchi paroli
- $sql o'zgaruvchisi - bajarmoqchi bo'lgan sql so'rovini yarating. Ushbu misolda biz shaharlar jadvalidan id ustunini tanlaymiz.
- so'rov ($sql). Bu erda biz hozirgina yaratgan SQL so'rovini bajarmoqdamiz.
- har biriga. Bu erda biz yuqoridagi so'rov buyrug'i natijasini aylantiramiz va uni $row o'zgaruvchisida saqlaymiz va keyin uni echo yordamida chiqaramiz.
- MySQL PDO da ulanishni yopish uchun $conn o'zgaruvchisini null ga o'rnating.
Ma'lumotlar bazasiga ulangan. Roʻyxat identifikatori: 1 2 3 4 5 6 3. Eskirgan mysql funksiyalari yordamida PHP dan ulanish
Ushbu usuldan faqat PHP ning eski versiyasidan foydalanayotgan bo'lsangiz va ba'zi sabablarga ko'ra yangi versiyaga o'tolmasangiz foydalaning. Ushbu usul o'rniga yuqorida ko'rsatilgan №2 usul va №3 usuldan foydalanish tavsiya etiladi. Men ushbu usulni foydalanish uchun tavsiya sifatida emas, balki faqat ma'lumot uchun kiritdim.
Ushbu kengaytma PHP 5.5 dan beri eskirgan. Ammo PHP 7.0 dan boshlab, u olib tashlanganidan beri bu ishlamaydi. PHP 5.5 dan boshlab, ushbu funksiyalardan foydalanganda, u E_DEPRECATED xatosini keltirib chiqaradi.
mysql.php faylini yarating:
"; $natija = mysql_query("Tanlash id FROM goroda"); $row = mysql_fetch_row($result); echo "id 1: ", $satr, "
\n"; mysql_close($conn); ?> Yuqorida:
- Mysql_connect funktsiyasi uchta argumentni oladi:
- MySQL ma'lumotlar bazasi ishlayotgan xost nomi;
- Ulanish uchun MySQL foydalanuvchi nomi;
- mysql foydalanuvchisi uchun parol. Bu yerda u foydalanuvchi nomi va parolidan foydalangan holda mahalliy serverda ishlaydigan MySQL ma'lumotlar bazasiga ulanadi.
- mysql_select_db funktsiyasi. Nomidan ko'rinib turibdiki, u siz ulanishni xohlagan ma'lumotlar bazasini tanlaydi. "Foydalanish" buyrug'iga teng. Ushbu misolda biz JB ma'lumotlar bazasiga ulanamiz.
- mysql_query funktsiyasi - MySQL so'rovingizni belgilash uchun ishlatiladi. Ushbu misolda biz shahar ma'lumotlar bazasidan id ustunini tanlaymiz. mysql_fetch_row. Biz yaratgan SQL so'rovidan qatorlarni chiqarish uchun ushbu funksiyadan foydalaning.
- Nihoyat, yuqorida ko'rsatilganidek, mysql_close buyrug'i yordamida ulanishni yoping.
Ma'lumotlar bazasiga ulangan. id 1: 1 MySQL-ga shu tarzda ulanishingiz mumkin. Takror aytaman, birinchi ikkita usuldan foydalanish yaxshiroqdir; O