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.
- Shunchaki xatoliklarni ekranga chiqarish
- Xatoliklar va ma’lumotlarni fayllarga yo’naltirish
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!';
}
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);
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.