Home > PHP/MySql > PHP/MySQL 6: mysqli extension ашиглах 1

PHP/MySQL 6: mysqli extension ашиглах 1

PHP -ийн mysql-тэй ажиллах сангуудын талаар өмнөх бичлэгүүдэд дурдсан. Одоо mysqli санг хирхэн ашиглах талаар авч үзье. Энэ бичлэгт mysqli -аар бичих хэлбэрүүдээс процедур ба обьект хандалтат хэлбэрээр бичих талаар авч үзэх болно. Mysqli мэдээж боломж хурд нууцлал хамгаалалтаараа маш илүү гэж веб сайтууд дээр бичсэн байна.  Бичих хэлбэрийн хувьд процедур, обьект хандалтаар бичиж болохоос гадна Mysql 4.1 -ээс хойш бий болсон бинари протоколыг ашигладаг болсон энэ нь SSH шиг ажилладаг тул нууцлал хамгаалалтыг маш сайжруулсан гэж  үзэж байгаа. Мөн ажиллах хурд нь маш их нэмэгдсэн гэсэн байна. Зарим тохиолдолд 30, 40 дахин хурдан ажилладаг гэсэн байх юм. Ер нь prepared statment ашиглан шинээр нэмэх засах үйлдэл олныг гүйцэтгэхэд хурд нэмэгдэх боломжтой л доо. За ингээд хирхэн яаж ашиглах талаар авч үзье.

1. Энгийн процедур хэлбэрээр бичих

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
< ?php
/* Баазад холбогдох хэсэг*/
$connection = @mysqli_connect(
            'localhost',  /* Холбогдох бааз байгаа хостын нэр */
            'root',       /* баазад холбогдох хэрэглэгчийн нэр */
            'secret',   /* нууц үг */
            'dbtest')  /* холбогдон ажиллах баазын нэр. хуучин mysql дээр mysql_select_db гэдэг функцээр сонгодог байсан. */
			or die("Can't connect to MySQL Server. Errorcode: ". mysqli_connect_error()); /* Хэрвээ энэ функц ажиллахгүй бол алдааны мэдээлэл
			гаргаж байна. Хөгжүүлэлтийн үед алдааны мэдээллийг дэлгэрнгүй гаргах нь амар бол харин бүтээгдэхүүн болгосон үед алдааны мэдээллийг
			нууцлал хамгаалалт нөлөөхөхөөргүйгээр гаргах шаардлагатай.
			Энэ 2 үеийг development environment  production environment гэж хэлдэг. */     
 
$result = mysqli_query($connection, 'SELECT artist, title FROM albums ORDER BY id'); /* Query-гээ ажиллуулж байна. Хуучин бид mysql_query ээр ажиллуулахдаа
$connection тавихгүй байхад дефаулт холболтоор ажилладаг энэ нууцлал хамгаалалтын хувьд муу учир заавал тухайн заасан холболтоор ажилладаг ийм ч учир
холблтыг эхний параметр болгосон биз.
*/
if (mysqli_affected_rows($connection))  { //Хэрвээ хүснэгтээс мэдээлэл гарч ирсэн бол
    print("Artists are:\n 
 
"); 
 
    while( list($artist, $title) = mysqli_fetch_array($result) ){ // бүх үр дүнг давталт хийх хэвлэж байна.
        printf("%s - %s ", $artist, $title);
    } 
 
    mysqli_free_result($result); // $result хувьсагчийг санах ойгоос чөлөөлж байна.
} 
 
mysqli_close($connection); // Холболтыг хааж байна.
?>

Энэ хэлбэрт бидний өмнө бичдэг mysql -ээс нэг их ялгаа харагдахгүй байна.

Одоо дээрхи жишээг обьект хандалт хэлбэрээр бичснийг авч үзье. Энэ жишээг OOP-ын анхан шатны мэдлэгтэй бас php/mysql-ийн анхан шатны мэдлэг чадвартай хүмүүс шууд ойлгоно. Харин ойлгохгүй байгаа хүмүүс эхлээд энэ талынхаа мэдлэг чадварыг жаахан дээшлүүлээд харвал зүгээр.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
< ?php 
/* mysqli гэсэн обьектийн тусламжтайгаар холболт бий болгой байна. Параметрууд нь процедур хэлбэртэй адил байна. */ 
$mysqli= new mysqli('localhost', 'root', 'secret', 'dbtest') or die("Can't connect to MySQL Server. Errorcode: ". mysqli_connect_error());     
/* Query-гээ ажиллуулж байна. */ 
$result = $mysqli->query('SELECT artist, title FROM albums ORDER BY id');
if ($mysqli->affected_rows) { 
    print("Artists are:\n <br /> <br />"); 
    /* Давталтаар бичлэг бүрийг давталт хийх дэлгэцэнд хэвлэж байна.  */ 
    while( list($artist, $title) = $result->fetch_array() ){ 
        printf("%s - %s <br />", $artist, $title); 
    } 
    /* $result хувьсагчийг санах ойгоос чөлөөлж байна */ 
    $result->close(); 
} 
/* Холболтыг хааж байна. */ 
$mysqli->close(); 
?>

Обьект хэлбэрээр бичихэд нэг их зарчмын том ялгаа харагдахгүй байна. $mysqli гэсэн обьект үүсгэж байна. Түүний query гэсэн методоор query -гээ ажиллуулж байна. Үр дүн хичээн мөр гарч ирэв гэдгийг affected_rows -аар авч байна. Тэгээд хоосон биш байвал гарч ирсэн мэдээллийг list($artist, $title) = $result->fetch_array() гэж авч байна. $result->fetch_array() нь гарч ирсэн мэдээллийн нэг мөр буюу нэг бичлэгийн талбар тус бүрийн утгыг массив хэлбэрээр буцаана. fetch_array л гэсэн байвал бүх төрлийнн mysql – ийн хувьд адилхан. Түүнийг нь list($artist, $title) гэж барьж авч байна. list функц массив хэлбэрээр буцаж ирж байгаа өгөгдлийг харгалзан өөрийн параметруудад олгоод буцаадаг функц. Манай жишээнд бол $artist, $title гэж байна. Эдгээр хувьсагдийг бид програмдаа ашиглана. Үүнийг $row = $result->fetch_array() гэж аваад $row[‘artist’] $row[‘title’] гэж авч мөн болно. Мөн индексээр $row[0], $row[1] гэж авсан болно. fetch_array гэсэн үед буцах массив нь өгөгдлийг талбарын нэрээр бас дарааллаар индекслэгдсэн байдаг нь харагдаж байна. Ер нь массив ямар хэлбэртэй, ямар утгатай байгааг доорхи байдлаар маш ойлгомжтой сайхан дэлгэцэн дээрээ хэвлээд үзэж болно.

1
2
3
 
echo "< pre >";
print_r($massivname);

За ингээд зуны амралтаа зугаатай бас шинэ юм үзэж харж байгаа залуустаа амжилт хүсье. Дараагийн бичлэг prepared statement -ийг mysqli ашиглан хэрэгжүүлэх талаар байх болно.

No related posts.

Related posts brought to you by Yet Another Related Posts Plugin.

  1. July 3rd, 2009 at 22:28 | #1

    Тэр сүүлд байгаа массив хэвлэхийг хийхдээ пре -ийн 2 талын хоосон зайг авч гурвалжин хаалтыг нийлүүлэхээ мартав. Энэ код харуулдаг хэсэг бас пре таг ашгладаг тэгээд дотор нь пре орохоор болохгүй болхоор нь ингээд тавичихлаа.

  2. user
    July 20th, 2009 at 15:51 | #2

    trim() fuction er ni yaadin bol. bi neg l sain oilgohgui baina. tailbarlaad uguuch. data g 2 talaas ni shahna geheer yaana gsn ug uu?

  3. ulzii
    July 21st, 2009 at 05:34 | #3
  1. No trackbacks yet.