..

Codeginiter kutubxonalarini transplantatsiya qilamiz

Loyihani qo'llab quvvatlash uchub buyerga bosing

Menimcha hamma ham phpda qilinadigan loyihalarni absolut noldan yozavermasda kerak. Lekin erinmaydigan odamlar ham ko’p odatda. Bunaqa ishlarda odatda ma’lumotlar bazasi uchun query builder yetishmasligi muammolardan biri sanaladi. Open sourceda ko’plab variantlar bor ammo hamma drayverlar bilan ham ishlash imkoniga ega emas.

Bu muammoni hal qilishning oson yo’li codeigniterning database kutubxonasidan foydalanish aslida. Chunki ushbu kutubxona bir vaqtning o’zida cubrid, ibase, mssql, mysql (mysqli), oci8, odbc, pdo, postrgre, sqlite, sqlite3 kabi drayverlarni qo’llay oladi. Shuningdek ko’pchilik bilmasa kerak, codeigniter build in xss va sql ineksiyalarni filtrlaydi (Albatta dasturchi slishkom dalbayob bo’lmasa).

Kutubxonani ulash

Codeigniter to’g’ri ishlashi uchun har doim bir necha konstantalarni talab qiladi.

Konstanta Vazifasi
FCPATH Freymvorning ildiz papkasi
SELF Ishga tushirilgan fayl nomi (index.php)
BASEPATH system papkasi
APPPATH Ilova ishlaydigan papka)

Kutubxona to’g’ri ishlashi uchun yuqoridagi ro’yxatdan BASEPATH konstantasining o’zi bizga yetarli. Chunki database moduli aynan sysmtem papkasidan yuklanadi.

Demak bu uchun alohida konstanta belgilaymiz.

<?php
define('BASEPATH', __DIR__ . DIRECTORY_SEPARATOR );

Shuningdek codeigniter error reporting uchun ikki usuldan foydalanadi.

Database kutubxonasi ham xatoliklardan yiroq emas shu sababli drayverlar ishi haqida doimiy ogohlantirish uchun log_message funsksiyasiga ham murojaat qilinadi.

function log_message( $level, $message ) {
	echo $level, PHP_EOL, $message, PHP_EOL;
}

$level o’rgaruvchisini tabga ko’ra keyinchalik o’zingizga moslashingiz mumkin. Bunda quyidagi qiymatlar keladi:

Qiymat Tavsif
ERROR Tizimdagi xatoliklar haqida ma’lumot
DEBUG Debug ma’lumotlari
INFO Informativ ma’lumotlar (masalan bizdagi holatda “Database Driver Class Initialized”)
ALL Har qanday turdagi informativ ma’lumotlar

PHP versiyasini aniqlash:

PHP versiyasi odatda multiplatform uchun ishlatiladi. Masalan phpda escaping yoki kutubxonalarni chaqirish versiyalarga qarab turlicha, kutubxona esa shu masalani php versiyasiga qarab o’zi hal qilishi uchun kiritilgan parametr.

function is_php( $version ) {
	static $_is_php;
	$version = (string) $version;

	if ( ! isset( $_is_php[ $version ] ) ) {
		$_is_php[ $version ] = version_compare( PHP_VERSION, $version, '>=' );
	}

	return $_is_php[$version];
}

Kutubxonani ishga tushirish:

Codeigniterda ko’proq holatda config/database.php fayli orqali ma’lumotlar bazasiga ulanish qiymatlari beriladi. Lekin istisno tariqasida dsn orqali ulanish ham belgilangan. Demak bizdagi holatda application papkasi va undagi fayllar bo’lmagani uchun dsn metodidan foydalanamiz.

driver://user:password@host/database
require_once 'database/DB.php';
$db = DB('mysqli://user:password@localhost/mydb');

Yakuniy fayl:

<?php

define('BASEPATH', __DIR__ . DIRECTORY_SEPARATOR );

function log_message( $level, $message ) {
	echo $level, PHP_EOL, $message, PHP_EOL;
}

function is_php( $version ) {
	static $_is_php;
	$version = (string) $version;

	if ( ! isset( $_is_php[ $version ] ) ) {
		$_is_php[ $version ] = version_compare( PHP_VERSION, $version, '>=' );
	}

	return $_is_php[$version];
}

require_once 'database/DB.php';
$db = DB('mysqli://user:password@localhost/mydb');

Sinov so’rovlari

Blog postlar ro’yxatini olish:

$posts = $db->get('blog');
print_r( $posts->result() ); //Object
print_r( $posts->result_array() ); //Array

Idenfikator asosida blogpostni olish:

$id = 123;

$db->select('id, title, date');
$db->from('blog');
$db->where('id', $id);
$blog = $db->row_array();
print_r( $blog ); //Array

Query string orqali murojaat:

$username = "yetimdasturchi";
$username = $db-escape( $username );
$sql = "SELECT * FROM `users` WHERE `username` = {$username}";
$user = $this->db->query( $sql );

if( $user->num_rows() > 0 ){
	echo "Foydalanuvchi ma'lumotlar bazsida mavjud";
}else{
	echo "Foydalanuvchi topilmadi";
}

Fluent interface metodi orqali:

$query = $db->select('id, name')
	->from('users')
	->where('last_visited > ', date('Y-m-d') )
	->order_by('id', 'asc')

Query builder bilan to’liq tanishish: Texnik hujjat

Database utility bilan ishlash:

Utilitani yuklash:

require_once( BASEPATH.'database/DB_utility.php' );
require_once( BASEPATH.'database/drivers/'.$db->dbdriver.'/'.$db->dbdriver.'_utility.php' );
$class = 'CI_DB_'.$db->dbdriver.'_utility';
$dbutil = new $class($db);

Ma’lumotlarni csv formatiga o’girish:

$query = $db->query("SELECT * FROM users");
echo $dbutil->csv_from_result( $query );

Bazani arxivga olish:

$backup = $dbutil->backup();
file_put_contents( '/tmp/mybackup.gz', $backup );

Qayta indeksatsiya qilish:

if ( $dbutil->optimize_table( 'users' ) ) {
        echo 'Success!';
}

Batafsil tanishish

Manipulatsiya qilish

require_once( BASEPATH . 'database/DB_forge.php' );
require_once( BASEPATH . 'database/drivers/'.$db->dbdriver.'/'.$db->dbdriver.'_forge.php' );
$class = 'CI_DB_'.$db->dbdriver.'_forge';
$dbforge = new $class($db);

Yangi jadval yaratish

$dbforge->create_table('table_name', TRUE);
// CREATE TABLE IF NOT EXISTS table_name

Yangi ustun qo’shish:

$fields = array(
	'phone' => array(
		'type' => 'VARCHAR',
		'constraint' => '255',
		'null' => TRUE
	)
);
$dbforge->add_column('users', $fields);

Batafsil tanishish

Xulosa

Codeigniter kichik frameworklar oilasiga kirsada aslida dasturchi uchun boshlang’ich barcha kerakli imkoniyatlarni bera oladi. Shuningdek undagi sodda struktura sabab boshqa ilovalar bilan intergratsiya qilish ham katta muammoga aylanmaydi.

Yuqoridagi keltirilgan misollarda esa frameworkning ichki kutubxonasini o’zingizning ilovalaringizda ma’lumotlar bazasi bilan ishlovchi qismlarda foydalansangiz bo’ladi. Ham qulay, ham ishonchli.