79
PHP 5 & MySQLi By CS#17 BUU (Z-ONE)

php5&mysqli

Embed Size (px)

DESCRIPTION

belajar php5 dan mysqli

Citation preview

Page 1: php5&mysqli

PHP 5 & MySQLi

By CS#17 BUU (Z-ONE)

Page 2: php5&mysqli

คานา

PHP ไดรบการเผยแพรเปนคร �งแรกในป 1994 โดย Rasmus Lerdorf โปรแกรมเมอรชาวอเมรกน โดยไดคดคน

สรางเคร1องมอท1ใชในการพฒนา เวบสวนตวของเขา จนมาถงปจจบนภาษา php เปนภาษาท1ไดรบความนยมและใชงาน

กนอยางแพรหลายในการพฒนาเวบเพจและเวบแอพพลเคช1น และภาษา php กมการพฒนามาหลายเวอรชน ซ1ง php5

ไดเพ1ม Functions การทางานในดานตาง ๆ เขามา เชน Object Oriented Model , MySQLi

หนงสอเลมน �จงมเน �อหาเก1ยวกบภาษา php ในระดบเบ �องตนและแบบ Object Oriented ดวย รวมไปจนถง

ฟงกช1นการเช1อมตอกบฐานขอมล แบบ MySQLi โดยคณะผจดทาไดทาการรวบรวมเน �อหามาจาก website ตางๆ รวมท �ง

จากประการณความรของคณะผจดทาเองดวย เราจงหวงวาผอานจะไดรบความรจากหนงสอเลมน � และสามารถนาความร

ไปใชงานไดไมมากกนอย

คณะผจดทา

Page 3: php5&mysqli

PHP5

Page 4: php5&mysqli

Hello world

เร1มตนกบตวอยางการเขยน PHP แบบงาย ซ1งพ �นฐานการเขยนคอการเร1มเขยน ตวอยาง

Hello, world! ดวย PHP มนเปนอะไรท1งายมาก แนนอนวาคณจะตองทาการตดต �ง Apache และ PHP กอนท1จะทาการ

เขยนตวอยางน � ของ PHP หรออยางนอยสามารถเขาถงเซรฟเวอรท1มความสามารถของ PHP

ตวอยางตอไปน �

<?php

echo " Hello, world! ";

?>

output >>>

<?php คอสวนสาคญ ท1จะชวยในการเปนประตในการแปลภาษา PHP , เอกสาร PHP สามารถมลกษณะเชนเดยวกบเอกสาร HTML ธรรมดา และ PHP อนเตอพรเตอร จะเพกเฉย ไมสนใจทกอยางท1ไมไดอยในชดของท1เรยกวา PHP tag ซ1งจะเปดและส �นสดตวอยางของเรา

echo จะสราง output ท1เปน string ออกไปยงหนา page ใหลอง save file เปน .php และไปหนาท1คณ save หากยงไมแนใจวาทาอยางไรตอไป แลวลองดไดท1หน1งในบทกอนหนาเก1ยวกบการใชเวบเซรฟเวอร เม1อคณเรยกหนาน � ผานทางเบราวเซอร ขอความวา “ Hello, world!” จะปรากฏออกมา เราจะสามารถสราง php ไดอกมากมายในบทถดไป ฉนจะบอกคณเลกนอยเก1ยวกบแทกของ PHP ท1เราเพ1งเหนเน1องจากพวกน �นมความสาคญตอการเขาใจ

Page 5: php5&mysqli

PHP tag

ในบทกอนหนาน �เราใชวธท1พบมากท1สดและถกตองท1สดของการเร1มตน PHP block::

<?php [code here] ?>

หน1งในน �ซ1งเปนชนดเดยวกนใชสาหรบแทก เชน blocks of JavaScript code::

<script language ="php"> [code here] </ script >

สามารถเลอกใชไดท �งสองตวเลอก อยางไรกตาม สวนใหญแลว จะมาจากการตดต �งของ PHP คอการ ต �งคา อนญาต

ใหเปนเวอรชนท1ส �นลง

<? [code here] ?>

หน1งในน �ซ1งเปนชนดเดยวกน ท1ใชสาหรบแทก เชน blocks of JavaScript code::

<script language ="php"> [code here] </ script >

สามารถเลอกใชไดท �งสองตวเลอก อยางไรกตาม สวนใหญแลว จะมาจากการตดต �งของ PHP คอการ ต �งคา อนญาตให

เปนเวอรช1นท1ส �นลง

<? [code here] ?>

บนบางเซฟเวอร ASP เปนลกษณะของ แทกอกแบบหน1งท1ไดรบการเปดใชงาน ตวอยางเชน

<% [code here] %>

ต �งแตน �ไป น1จะไมไดรบการ supported บนเซฟเวอรท �งหมด คณอาจจะตองการท1ใชแบบ full version แทน

ตอไปจะเปนลกษณะของ output เวอรชนพเศษ

<?= [output here] ?>

สดทายเปนเชนเดยวกบการเขยน:

<?php echo " some output "; ?>

Page 6: php5&mysqli

In and out of PHP

เม1อจะเขยน web pages โดยธรรมชาตแลว จะใช HTML ในการเขยนท �งหมด ถาจะทาไดเรวจะตองรวม HTML tags กบ output ท1สรางจาก PHP ซ1งมนงายมาก

<?php

$myVar = " Hello world! ";

?>

<i >We have HTML <u>all </ u> over the place here! </ i ><br />

<i >But some PHP as well, as you can see: </ i ><br />

A message from PHP: <b><?php echo $myVar ; ?></ b>

Output >>

เราสามารถสราง string ท1ประกอบไปดวยสามสวน เร1มจาก bold tag, our variable , และ end bold tag จะใช จดเปนตวดาเนนการ : : ซ1งจดจะทาการเช1อมสตรงใน PHP เขาดวยกน

อยางไรกตาม ถาคณเร1มมวธในการทาของ HTML ท1มาก แตกบ วธการทาของ PHP ท1มนอย คณอาจจะทาแบบน �แทนได :

<?php

$myVar = " Hello world! ";

?>

<i >We have HTML <u>all </ u> over the place here! </ i ><br />

<i >But some PHP as well, as you can see: </ i ><br />

A message from PHP: <b><?php echo $myVar ; ?></ b>

Output >>

Page 7: php5&mysqli

PHP คอนขางมความยดหยนมากในพ �นท1น � ดงตวอยางตอไปน �

<?php

$myVar = 42;

if ( $myVar == 42)

{

?>

<b>Yes, the number is in fact 42! </ b>

<?php

}

?>

Output >>

จากตวอยางขางบน จะเหนวา เราสามารถกระโดดออกเขาไปในตรงกลางของเง1อนไข ในบลอคของโคดได สวน HTML และขอความเอาทพตเฉพาะในกรณท1 $ MyVar ต �งคาจรงไวคอ 42

Page 8: php5&mysqli

Variables

PHP Variable() สาหรบการเขยนโปรแกรมสาหรบภาษาคอมพวเตอรระดบสง ส1งท1จะขาดเสยมไดคอ การ

กาหนดและใชตวแปร (variable) ตวแปรในภาษา PHP จะเหมอนกบในภาษา Perl คอเร1มตนดวยเคร1องหมาย dollar ($) โดยเราไมจาเปนตองกาหนดแบบของขอมล (data type) อยางเจาะจงเหมอนในภาษาซ เพราะวา ตวแปลภาษาจะจาแนกเองโดยอตโนมตวา ตวแปรดงกลาว ใชขอมลแบบใด ในชวงเวลาน �นๆ เชน ขอความ จานวนเตม จานวนท1มเลขจดทศนยม ตรรกะ เปนตน

ตวอยาง

<?php

$myVar = " Hello world! ";

?>

ในตวอยางตอไปน � เราจะใช echo function ( echo จรงๆสรางภาษาและฟงกชนไมได แตท1ไมสาคญในตอนน �) ซ1งเราจะได outputs ออกมา

<?php

$myVar = " Hello world! ";

echo $myVar ;

?>

ในตวอยางน � เราจะใช text string แตเราจะสามารถใชตวเลขลงไปกได เชน

<?php

$myVar = 42;

echo $myVar ;

?>

ในอกทางหน1ง ทาไมไมเพยงใชสตรงขอความท1มจานวน 42 มนไดหรอไม? น1นไมใชปญหา ลองวางเคร1องหมายคาพดรอบตวเลขตามในตวอยางขางตน และคณจะเหนวาคณไดรบผลลพธเชนเดยวกนแนนอนแตในความเปนจรงมนจะเหมอนกนไหม? ไม ไมใชอยางแนนอน ในขณะท1 PHP ไมอาจดเหมอนการดแลภายในของการตดตามของชนดขอมลท1คณใสลงในตวแปรคณ

Page 9: php5&mysqli

If statements

if statement

ฟงฟงกชน if เปนฟงกชนท1สาคญในเกอบทกๆภาษาของการเขยนโปรแกรมในท1น �เราจะใชตวอยางฟงฟงกชน if

ดงน �

<?php

$number = 42; //เปนการกาหนดคา 42 เขาไปในตวแปร number

if ( $number == 42) // ถาคาท"รบจากตวแปรเขามามคาเทากบ 42 ใหทาบรรทดตอไป

echo " The number is 42! "; // แสดงขอความออกทางหนาจอ

?>

The else statement

เน1องจากแค if มนยงไมเพยงพอควรจะทาอยางอ1น ดงน �นฟงฟงกชน else จะเปนตวชวย if เปนอยางด โดยการ

ทางานตอจาก if ถาเง1อนไขไมตรงกบ if กจะทา else แทน

<?php

$animal = " Cat "; //กาหนดคา cat เขาไปในตวแปร animal

if ( $animal == " Dog") // ถาคา animal เทากบ Dog ใหทาบรรทดตอไป

echo " It's a dog! "; // แสดงขอความ Dog ทางหนาจอ

else //ถาไมใชเง"อนไขบนกมาทาอนน3

echo " I'm sure it's some sort of animal, but not a dog! "

//การแสดงขอความทางหนาจอ

?>

เร'องหมายท'ใชในเง'อนไข if และ else มดงน 9

if($number != 30) //ถา number มคาไมเทากบ 30

if($number > 30) //ถา number มคามากกวา 30

if($number < 30) //ถา number มคานอยกวา 30

if($number >= 30) //ถา number มคามากกวาหรอเทากบ 30

if($number <= 30) //ถา number มคานอยกวาหรอเทากบ 30

Page 10: php5&mysqli

More if statements

เน1องจาก if สามารถทาไดหลายทางในการใชงานซ1งเปนส1งท1ควรจะเปนตองรดงตวอยางตอไปน �

ตวอยางท1 1

<?php

$number=10; //นาตวเลข 10 ใสเขาไปในตวแปร number

if($number>0) //ถา number มคามากกวา 0 ใหทาบรรทดตอไป

if($number<20) // number ทาครบตามจานวนรอบท"กาหนดแลวหรอยง ถายงทาบรรทดตอไป ถาเสรจแลวกหลดจากฟงฟงกชนน3

echo"Number is bigger than 0 but smaller than 20!"; // แสดงผลออกทางหนาจอ

?>

ตวอยางท1 2

<?php

$number=10; //กาหนดตวแปร number มคาเทากบ 10

if(($number>0) and ($number<20)) // ถา number มคามากฃกวา 0 แตนอยกวา 20 ใหทาบรรทดตอไป

echo"Number is bigger than 0 but smaller than 20!"; //แสดงผลออกทางหนาจอ

?>

ตวอยางท1 3

<?php

$number=10; //ตวแปร number มคาเทากบ 10

if($number>20) // ถา number มคามากกวา 20 ใหทาบรรทดตอไป

echo"Number is bigger than 20!"; //แสดงผลออกทางหนาจอ

elseif($number>10) // ถา number มคามากกวาสบใหทาบรรทดลาง

echo"Number is bigger than 10!"; // แสดงขอความออกทางหนาจอ

else // ถา number มคามากกวา 20 ใหทาบรรทดถดไป ถายงทาดนบนอกคร3ง

echo"The number seems a bit low..." // แสดงขอความทางหนาจอ

?>

Page 11: php5&mysqli

ตวอยางท1 4

<?php

$number=10; // นาคา 10 ใสเขาไปในตวแปร number

if($number==10): // ถา number มคาเทากบ 10 ใหทาบรรทดตอไป

echo"Number is 10!"; // แสดงขอความออกทางหนาจอ

else: // ถา number มคาไมใช 10 มาทาบรรทดน3

echo"Number is not 10.. "; // แสดงขอความออกทางหนาจอ

echo"But why?"; // แสดงขอความออกทางหนาจอ

endif; //จบการทางาน if โดยท"ไมวนการทางานตอ

?>

ตวอยางท1 5

<?php

$numberOfItems=2; // ใหคา 2 เขาไปในตวแปร numberOfItems

$output="There is "; // ใหเกบขอความเขาไปในตวแปร

if($numberOfItems>0) // ถา numberOfItems มากกวา 0 ใหทาบรรทดตอไป

$output.="something"; // นาขอความท"กาหนดมาตอจากตวแปร output เดม

Else //ถา numberOfItems มคานอยกวา 0 ใหทาบรรทดน3

$output.="nothing"; // นาขอความท"กาหนดมาตอจากตวแปร output เดม

$output.=" in your basket"; // นาขอความท"กาหนดมาตอจากตวแปร output เดม อกคร3ง

echo $output; // แสดงผลลพธจากการท"เตมขอความลงไปทางหนาจอ

?>

Page 12: php5&mysqli

The switch statement

ในฟงฟงกชน switch จะมความหลากหลายมากกวาฟงฟงกชน if เพราะมการกาหนดคาตวเลอกเปนตวเลขเพ1อทางานใน

แตละเลขท1เราไดกาหนดไปดงตวอยางตอไปน �

ตวอยางท1 1

<?php

$answer = 0; //กาหนดให answer มคาเทากบ 0

if ( isset ( $_GET[" answer "])) // รบคาจากแปนพมพมา

$answer = $_GET[" answer "]; // นาคาท"ไดจากแปนพมพเกบฝนตวแปร answer

switch ( $answer ) // ทาการเลอกจากตวเลขท"ไดรบจากแปนพมพ

{

default : //เปนตวเร"มตนเพ"อถาม input ท"ตองพมพใส

echo " Which version of PHP are you using? <br />< br /> ";

//เปนการแสดงขอมลทางหนาจอถามวาเราใช php ไหนอย

echo " <a href =\"?answer=3\"> 3</ a><br /> ";

echo " <a href =\"?answer=4\"> 4</ a><br /> ";

echo " <a href =\"?answer=5\"> 5</ a><br /> ";

//แสดงขอความทางหนาจอ

break ; //ทาการหยดไมใหมนไปทา case อ"นๆ

case 3: // ถาตวเลขท"รบมามคาเปน 3 ใหทาบรรทดตอไป

echo " Ugh that's old, upgrade now! ";

break ;

case 4: // ถาตวเลขท"รบมามคาเปน 4 ใหทาบรรทดตอไป

echo " Still on version 4? Give PHP 5 a try! ";

break ;

Page 13: php5&mysqli

case 5: // ถาตวเลขท"รบมามคาเปน 5 ใหทาบรรทดตอไป

echo " Good choice! ";

break ;

}

?>

ตวอยางท1 2

$color = " red "; //กาหนดคา red เขาไปในตวแปร color

switch ( $color ) // นาคาท"ไดจาก color มาดแตละ case ท"มอย

{

case " red ": // ถาคาท"ไดเปน red แสดงขอความ Nice basic color!

case " blue ": // ถาคาท"ไดเปน blue แสดงขอความ Nice basic color!

case " green ": // ถาคาท"ไดเปน green แสดงขอความ Nice basic color!

echo " Nice basic color! ";

break ; // ทาการหยดไมใหมนไปทา case อ"นๆ

case " black ":

echo " Too dark! "; // ถาคาท"ไดเปน black แสดงขอความ Too dark!

Break ; //ทาการหยดไมใหมนไปทา case อ"นๆ

case " white ": // ถาคาท"ไดเปน white แสดงขอความ Too bright!

echo " Too bright! ";

break ; //ทาการหยดไมใหมนไปทา case อ"นๆ

}

Page 14: php5&mysqli

Loops

ภาษาท1ใชในการเขยนโปรแกรมไมวาจะเปนภาษาไหน ความสามารถในการวนลปทาซ �าน �นถอวาสาคญมาก ภาษา PHP

เปนภาษาหน1งท1มความสามารถน � และมอย 4 รปแบบดวยกน

The while loop

ถอวาเปนวธท1งายท1สดจากท �งหมด 4 แบบ มการทางานอยางงายๆ คอจะวนลปทาซ �าไปเร1อยๆ ตราบเทาท1เง1อนใขยงเปน

จรงอย

ตวอยาง

<?php

$i = 0;

while ( $i < 5)

{

echo $i ." <br >";

$i ++;

}

?>

ผลจากการรนโปรแกรมน �คอ 0 1 2 3 4 คอคา $i ไมไดอยในเง1อนไขท1นอยกวา 5 อกตอไป โดยในแตละคร �งท1มการทาซ �า

จะมการบวก 1 ไปใหกบคา $i และเง1อนไขท1อยใน while loop ตองสามารถคดหาจากวธ Boolean ไดวาจรงหรอเทจ

The do while loop

ทางานเหมอน while loop แตมส1งหน1งท1แตกตางกนคอ while loop เง1อนไขจะถกเชคกอนท1จะเขาลป แต do while loop

จะเชคท1สวนทายของการทาซ �า ซ1งหมายความวาการทางานแบบ do-while loop อยางนอยท1สดจะตองมการทางานซ �า 1

คร �ง แตแบบ while loop น �น อาจจะมบางสวนของ code ท1ไมเคยไดมการเขาใชเลยถาเง1อนไขน �นไมเคยเปนจรง

Page 15: php5&mysqli

<? php

$i = 0;

do

{

echo $i ." <br >";

$i ++;

} while ( $i < 0);

?>

ดวยวธ while loop จะไมมการทางานใดๆท �งส �น เพราะ $i คอ 0 ท1ซ1งจะไมมคาไหนท1มคานอยกวา 0 แตถาใชวธ do-while

loop จะเกดการทาซ �า ซ1ง PHP จะรวาเง1อนไขน �ไมไดเปนจงและออกจากลปไป

The for loop

มความซบซอนมากกวา while loop แตถาเราทาความเขาใจกบการทางานของ for loop มากข �น เรากเหนวามนดกวา

ตวอยาง

<?php

for ( $i = 0; $i < 5; $i ++)

{

echo $i ." <br /> ";

}

?>

ตวอยางน �จะใหผลลพธเหมอนตวอยางกอนหนา แตจะเหนไดวามจานวนของบรรทดนอยกวา ตวแปรท1เปนตวนบน �นจะ

เร1มตน ทดสอบและเพ1มคาในบรรทดเดยวกน

โดยเราจะเร1มจากการประกาศตวแปรและกาหนดคาให จากน �นเขยนเง1อนไขมาคานวณ และเพ1มคา(หรอลดคา) ตวแปร

แตละสวนแยกจากกนโดย ;(semicolon) The for loop น �นจะมความกระชบและเหมาะสาหรบทกๆ สถานการณท1ตองการ

ท1จะมตวนบในการทาซ �า

Page 16: php5&mysqli

The foreach loop

Foreach loop ใน PHP ทางานดวย array PHP จะ error เม1อพยายามจะใชตวแปรท1ไมบรรจ array The foreach loop ม

ความแตกตางกน 2 แบบ

ตวอยาง (แบบท1 1)

<?php

$animals = array (" Dog", " Cat ", " Snake ", " Tiger ");

foreach ( $animals as $animal )

echo $animal . " <br /> ";

?>

คณสมบตท1ดของ foreach loop คอ ถกออกแบบใหสามารถทางานไดกบ array เทาน �นซ1งสงผลใหการทางานของ

ท �ง process งายข �น ในแตละการทาซ �าน �น $animal ถกกาหนดใหเปนท1สาหรบ array ปจจบน ทาใหสามารถเขาถงไดงาย

ข �น จากตวอยางท1ใหมา output จะเปน list ของ animals

จากตวอยางกอนหนาเราจะสามารถเขาไดถงคาของลป ตวอยางตอไปเราจะให PHP กาหนดคาโดยอตโนมตโดยการท1จะ

ไมกาหนดไวแตทแรก ในกรณท1ตองการเขาถงคาของ key ปจจบนแนะนาใหใชแบบท1 2

ตวอยาง (แบบท1 2)

<?php

$animals = array (1 => " Dog", " Cat ", " Snake ", " Tiger ");

foreach ( $animals as $key => $value )

echo " Animal number " . $key . " is a " . $value . " <br /> ";

?>

Page 17: php5&mysqli

Including files

หน1งในคณสมบตท1เปนท1นยมใน PHP กคอความสามารถในการ include file ซ1งทาใหสามารถท1จะแบง code ไว

ในหลายๆไฟลได และยงนามาใชไดในหลายๆ ท1ดวย เชน เขยนรวบรวมฟงกชนท1ใชงานบอยๆไวท1ไฟลอนหน1ง โดยเม1อ

ตองการจะใช กสามารถ include file น �นเขามาได ลองดตวอยางไดจากขางลางน �

<i >ขางใตน3 เปนการแสดงคาส"งของการ include file!</ i >

<br />< br />< br />

<?php

$number1 = 20;

include (" includedfile.php ");

?>

<br />< br />< br />

<i >ทาการ include file เรยบรอยแลว!</ i >

จากตวอยาง มการ include file ช1อ includedfile.php ซ1งเปนไฟลอกไฟลหน1งท1อยในไดเรกทอร1เดยวกน ซ1งไฟล

includedfile.php กจะอาจจะมเน �อหาดงตวอยางขางลาง

<b>น"คอ code ใน includedfile.php</b><br />

<?php

$number2 = 30;

echo " And so is this PHP code - ". $number1 ." + ". $number2 ." equals " . ( $number1 + $number2 ) . " ! ";

?>

สงเกตวาการ include file น �นทาไดงายมาก ซ1งเปนเพยงแคการนาไฟลอ1นๆมาเปนสวนหน1งของไฟลท1ตองการเทาน �น

Page 18: php5&mysqli

ตอไปจะทาการยกตวอยางการใช include ในงานจรง โดยตวอยางน �เปนการเลอก include files ตามคาท1รบมาโดยการใช

switch case ในการเลอก include file

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi tional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona l.dtd">

<html xmlns ="http://www.w3.org/1999/xhtml" xml:lang ="en" lang ="en">

<head >

<title >My website </ title >

<meta name="generator" content ="TSW phpCoder 2008" />

</ head >

<body >

This part of the website is static. Dynamic content below!

<br />< br />< br />

<?php

if ( isset ( $_GET[" show"]))

{

switch ( $_GET[" show"])

{

case " about ":

include (" subpage_about.php ");

break ;

case " contact ":

include (" subpage_contact.php ");

break ;

default :

include (" subpage_index.php ");

break ;

}

}

Page 19: php5&mysqli

else

include (" subpage_index.php "); ?>

</ body >

</ html >

หรอ อาจจะใชการ include files ในการนาเขาสวนบนและสวนลางของเพจ เพ1อใหมลกษณะเหมอนกนทกหนากไดเชนกน

ดงตวอยางขางลาง

<?php

include (" top.php ");

?>

The actual content of the page goes here!

<?php

include (" bottom.php ");

?>

จะเหนวาการ include น �น สามารถใชไดหลากหลาย และชวยในการประหยดเวลาในการสรางงานดวย ขอใหผ ใชนาไปใช

งานไดอยางเช1ยวชาญ จะทาใหงานมประสทธภาพข �นเยอะ

Page 20: php5&mysqli

Function

ในภาษา PHP หรอภาษาเขยนโปรแกรมอ1นๆน �น สามารถสรางกลมของโคดท1เรยกวา ฟงกชน เกบไวได เพ1อใหสวนอ1น

ของโปรแกรมสามารถเรยกใชได ซ1งชวยใหไมจาเปนตองเขยนโคดน �นซ �าแลวซ �าอก ในกรณท1ตองการเขยนโคดท1ทางาน

แบบเดยวกน ดงน �นเม1อเราสรางฟงกชนแลว สวนตางๆของโปรแกรมน �นจะสามารถเรยกฟงกชนน �มาทางานเม1อไหรกไดท1

ตองการ

ตวอยางการเขยนฟงกชนใน PHP

<?php

function SayHello( $to )

{

echo " Hello, ". $to ;

}

?>

การเขยนฟงกชนเราจะเร1มตนดวย keyword คอ “function” และตามดวยช1อฟงกชน จากตวอยางช1อฟงกชนคอ

SayHello และจะตองตามดวยวงเลบซ1งเปนท1กาหนดพารามเตอรหรอคาท1ถกสงมาจากผ เรยกใชฟงกชน ซ1งตวแปรท1

กาหนดเปนพารามเตอรไมจาเปนตองกาหนดชนดขอมล เพราะตวแปรในภาษา PHP จะเปนขอมลชนดใดกได และไม

จาเปนตองกาหนดพารามเตอรเสมอไปหากการทางานน �นไมจาเปนตองรบคาใดๆ และท1สาคญ โคดของฟงกชนน �นจะ

ตองอยภายใตเคร1องหมายปกกา

ตวอยาง การเรยกใชฟงกชนในการแสดงขอความทกทายช1อคนหรอส1งของท1สงผานพารามเตอร $to

<?php

function SayHello( $to )

{

echo " Hello, ". $to ;

}

SayHello(" World ");

?>

Page 21: php5&mysqli

การประกาศฟงกชนน �นจะเปนแบบ global แตตวแปรท1อยภายในฟงกชนจะไมเปน global และในขณะเดยวกน

ตวแปรท1อยภายนอกฟงกชนกจะไมมผลการทางานภายในฟงกชนเชนกน ศกษาจากตวอยางตอไปน �

<?php

$var = " test ";

function SayHello()

{

return " Current value of var: ". $var ;

}

echo SayHello();

echo " <br />< br /> ";

echo " Current value of var: ". $var ;

?>

จากตวอยาง ผลลพธท1 1 ตวแปร $var น �นจะไมมคาอะไรเลย นอกจากจะประกาศตวแปรไวในฟงกชน และผลลพธท1

2 จะไดเปนคา “test” ตามท1ประกาศไวในบรรทดแรก แตเรามวธท1ทาใหตวแปรในฟงกชนสามารถเรยกใชตวแปร

ภายนอกฟงกชนไดโดยการ ใส global กอนช1อตวแปรภายในฟงกชน ตามตวอยางตอไปน �

<?php

$var = " test ";

function SayHello()

{

global $var ;

return " Current value of var: ". $var ;

}

?>

Page 22: php5&mysqli

การกาหนดพารามเตอรสามารถมไดหลายตวและอาจกาหนดคาดฟอลตของมนได ศกษาจากตวอยางตอไปน �

<?php

function GreetCoder( $name, $msg = " Hello, coder! ")

{

echo " A message to " . $name . " : " . $msg;

}

GreetCoder(" John Doe "); //1

echo " <br />< br /> ";

GreetCoder(" John Doe ", " This is a custom message! "); //2

?>

จะเหนวาการเรยกใชฟงกชนไมจาเปนตองใชพารามเตอรทกตว ซ1งในกรณ 1 คา $msg จะมคาอยในตวมนเองน1นคอ

“Hello, coder!” สวนในกรณท1 2 คา $msg จะมคาตามท1เราเรยก

Page 23: php5&mysqli

Introduction

PHP เปนภาษาท1ไมเครงครด ไมจาเปนตองบอกตวแปรภาษา ตวแปรบางประเภทเพยงแคกาหนดคาใหมน

PHP จะทราบวาตองเกบเปนประเภทใด เราไมตองสนใจเก1ยวกบประเภทตวแปร แตจะมหลายสถานการณท1ควบคมชนด

ของตวแปร ดงน �น PHP ไมเปดเผยการทางานในการตรวจสอบและการจดการกบประเภทตวแปร ขอมลเก1ยวกบประเภท

ตางๆใน PHP

PHP ประกอบดวย ชนดขอมลพ �นฐาน 4 ชนด :

boolean - เหมอนจานวนเตม แตมคาท1เปนไปได คอ 0 หรอ 1, เปนเทจ(false) หรอ จรง(true)

integer - จานวนเตมท1ไมเปนทศนยม

float (บางคร �งเรยกวา double) - เปนตวเลขท1เปนทศนยม

string - สายอกขระท1รวมกนเปนขอความ

นอกจากน �ยงม 2 ชนดขอมลท1มความซบซอน :

Array - เกบอาเรยของรายการ เชน หลาย string หลาย integer เกบขอมลเปนชด เปนแถว หรอกลมของขอมล

Object - อางองถง instance ของ class จะเก1ยวของกบ Object Oriented programming

นอกจากน �ยงม 2 ชนดพเศษ:

Resource - อางองถงแหลงท1มาจากภายนอก อาจจะเปนแหลงท1มาจาก file หรออาจเช1อมตอกบฐานขอมล

NULL - คาของ null คอ ไมมอะไร (ไมเหมอน 0 (ศนย) เพราะศนยเปนคาจรง) ตวแปรท1ยงไมไดกาหนดคาหรอ

ท1ไมได set คา จะเปรยบวาเปนคา NULL

Page 24: php5&mysqli

Working with numbers

การทางานของตวแปลใน Php น �นไมตองประกาศชนดตวแปล เราสามารถดาเนนงานจานวนจรงในงานของเราไดเลย

ตวอยาง

<?php

$num1 = 10;

$num2 = 3;

echo "Value num1 = $num1 "."<br/>"; //show value number1

echo "Value num2 = $num2 "."<br/>"; //show value number2

echo "<br/>";

echo "Addition: $num1 + $num2 = ".( $num1 + $num2)."<br/>"; // แสดงผลบวก

echo "Substraction: $num1 - $num2 = ".( $num1 - $num2) ."<br/>"; // แสดงผลลบ

echo "Multiplication: $num1 x $num2 = ".( $num1 * $num2)."<br/>"; // แสดงผลคณ

echo "Division: $num1 / $num2 = ".( $num1 / $num2 )."<br/>"; // แสดงผลหาร

echo "Mod: $num1 % $num2 = ".( $num1 % $num2)."<br/>"; // แสดงผลหารเอาเศษ

?>

Output >>

Value num1 = 10 Value num2 = 3

Addition: 10 + 3 = 13Substraction: 10 - 3 = 7Multiplication: 10 x 3 = 30Division: 10 / 3 = 3.3333333333333Mod: 10 % 3 = 1

อธบายสวนของโปรแกรม<br/> เปนการบอกวาให เวน 1 บรรทดท1ใชใน html' . ' หรอ dot เปนการเช1อมสายอกขระดงน �นเราสามารถเขยนไดวา echo "Value num1 = $num1 "."<br/>"."Value num2 = $num2 "."<br/>".“ สายอกขระท1ตองการตอ”. …......; เราจะเหนไดวา จะทาเราอานโคดไดยาก เพ1อใหงายตอการอานโคดท1เราจรงตองจดรปใหเหมาะสม เพ1อ ความเขาใจในการอานโคดท1เราตองการส1อกบมนษยดวยกน

Page 25: php5&mysqli

Working with strings

สตรงเปนชดของตวอกษร ใน PHP คณอาจพจารณาใหเปนอารเรยของตวอกษรเพราะคณอาจเขาถงตวอกษรบางในสตรงข �นอยกบดชน zero-based ของมนเชนเดยวกบอารเรย ในบทของการกวดวชาน �เราจะทางานบตกบสตรงในหลายวธท1จะแสดงใหคณเหนความเปนไปได

การกาหนดสตรงกาหนดสตรงใน PHP เปนเร1องงาย เพยงตดช �นสวนของขอความท1มคาพดเดยวหรอสองอยางใดอยางหน1ง และคณมสตรง

ดงตวอยางน �

<?php

$var = " A string ";

echo $var ;

?>

หรอคณสามารถใชสตรงโดยตรงสาหรบการสงออกโดยไมตองกาหนดเปนตวแปรแรก :

<?php

echo " A string ";

?>

ตามท1ระบไว คณสามารถใชคาพดเดยวไดเชนกน

<?php

echo ' A string ';

?>

ท1จรงมความแตกตางระหวางการใชสตรงท1ยกมาเด1ยวและประเภทคเปน สตรงท1ยกมาคจะแยกโดย PHP สาหรบตวแปร

และลาดบหนพเศษ ชวยใหคณสามารถใชตวแปรภายในของสตรงตวเองมน ลองใชตวอยางน �:

<?php

$message = " Hello, world! ";

echo " The message variable contains the value $message <br />< br /> ";

echo ' The message variable contains the value $message ';

?>

Page 26: php5&mysqli

คณจะเหนจากผลลพธ บรรทดแรกออกคาของตวแปรในขณะท1หน1งท1สองกออกมาราวกบวามนเปนเพยงช �นสวนของ

ขอความอ1น คณอาจตองการใชคณลกษณะของสตรงท1ยกมาสองคร �งน �หรอคณอาจจะใชการเรยงตอกนตามท1อธบายใน

สวนถดไป หลงนาเสนอประสทธภาพท1ดข �นและบางคนเช1อวามนจะเปนรหส prettier

\ ในสตรงดงน �นส1งท1คณทาเม1อคณตองการใชอางเตยงภายในของสตรงท1ยกมาสองคร �ง? คณหนมนใชตวอกษรทบขวาเชนน �

<?php

echo " Is this a so-called \"test\" or not? ";

?>

แต เม1อไหรคณตองการใช \ ตวอกษร ในกรณของ string? ใช \ เม1อคณตองการท1จะตดออก อยางเชน :

<?php

echo " The last character is a backslash\\ ";

?>

สตรงเช'อมโยงวธการรวบกนของ 2 วธหรอ การเช1อมตอกนของ string หลายตว ใน php สามารถใชตวเช1อมโยง ได เชนน �

<?php

$newString = $string1 . $string2 ;

?>

หากคณมมากกวา 2 string และ คณสามารถรวมตวแปลเปนขอความท1ยกมาไดเชนน � พวกเราสามารถรวมช1อและ

นามสกลของบคคล และใส ในระหวาง “ ” :

<?php

$name = $firstName . " " . $lastName ;

?>

ในบทถดไป พวกจะเราสามารถทางานไดมากกวา string

Page 27: php5&mysqli

More Strings

PHP มเซตของฟงกชนท1ใหญ สาหรบการทางานกบ string ซ1งเกนขอบเขตของบทเรยนในการบรรยายท �งหมด แตในบทน �

เราจะมการดท1บางสวนของฟงกชนท1มประโยชนมากข �นท1เก1ยวของกบสตรง

ความยาวของสตรง

ในบางกรณ มนจะเปนประโยชนมากหากทราบความยาวท1แนนอนของสตรง น1นคอจะประกอบดวยจานวน

อกขระ รวมท �งพ �นท1คณอาจจะใชฟงกชน strlen สาหรบจดประสงคน � ตามท1มภาพประกอบในตวอยางน �ฟงฟงกชนจะใช

เวลาเพยงหน1งพารามเตอร และน1นเปนตวแปรสตรงท1จะใชวด

<?php

$string = " Hello world! ";

echo " Length of string: " . strlen ( $string );

?>

ตวอกษรพมพเลกและตวพมพใหญ

บางคร �งคณอาจจาเปนตองแปลงสตรงของคณไปท �งสตรงตวพมพใหญหรอสตรงตวพมพเลก ซ1งทาไดงายมาก

<?php

$string = " Hello world! ";

echo strtolower ( $string );

echo " <br /> ";

echo strtoupper ( $string );

?>

ในฟงฟงกชนแรกจะคนคาตว string ตวอกษรพมพเลกท �งหมด ในขณะท1ฟงกชนท1สองจะคนคาตวอกษรพมพใหญ เราจะ

สงผลออกมาไดทนท

Page 28: php5&mysqli

คนหาสวนของ string

ถาคณตองการหาตาแหนงของสวนของสตรง ภายในสตรงท1มขนาดใหญ คณอาจใชฟงกชน strpos() น �

<?php

$string = " Hello world! ";

echo " Position of world in string: " . strpos ( $string , " world ");

?>

ตองระวงในบางกรณเปนพเศษ หรอในคาท1ตางๆกน "world" และ "WORLD" ไมเหมอนกน หากคณตองการท1จะมองหา

สวนหน1งของสตรงและกรณท1ไมควรเกดข �น ใชกรณพเศษแทนฟงฟงกชน เรยกวา stripos(). เราจะใชเพยงสอง

พารามเตอรชวยใหคณสามารถท1จะบอกไดวาเร1มการคนหา PHP ตรงไหน มนไมไดเก1ยวของกบการยกตวอยางท1วาน �

เรยกสวนหน'งของ string

ในตวอยางสดทาย เราจะหาสวนหน1งของ string อยางไรกตาม คณตองไดรบสวนหน1งของสตรงท1เกดข �นจรงและ

ใชงานอยางอ1นได ฟงฟงกชน substr() สามารถชวยคณทาในส1งน �นได และในตวอยางถดไป เราจะใชมนพรอมกบสอง

การทางานของฟงกชนท1เราไดกลาวมาแลว

<?php

$string = " Hello world! ";

$startPos = strpos ( $string , " world ");

$length = strlen (" world ");

$substring = substr ( $string , $startPos , $length );

echo " A specific part of the string: " . $substring ;

?>

ตวอยางอาจจะดไมมประโยชนมากในตอนน � และเราจะทามนเปนบตท1ยากสาหรบตวเราเอง โดยการวดความยาวของ

สตรงท1เรานบในคร �งท1สองและใชเพยงตวเลขจรงแตจะแสดงวธท1คณสามารถใชฟงกชนสตรงในการรวมกนเพ1อใหไดผลใน

ส1งท1อาจเปนประโยชนในสถานการณท1คอนขางซบซอนมากข �น

มฟงกชนอ1นๆอกมากมายท1เก1ยวของกบสตรงน � แตถงมมากกอาจมประโยชนเฉพาะบางกรณ คณสามารถลองด

ไดท1คมอ PHP ถาคณตองการทราบขอมลเพ1มเตม

Page 29: php5&mysqli

Working with arrays

การทางานใหเปนระบบโดยใชอาเรย

รายการโครงสรางของส1งตางๆมประโยชนสาหรบการจดทาโปรแกรม. คณสามารถแยกกลมส1งของมากมายท1แตกตางกน เชน ภาษาของโปรแกรมภาษาตางๆมากมาย รายละเอยดความแตกตาง อยางไรกตาม ภาษา php คณสามารถจดลาดบของมนได เปนความโชคดภาษามาพรอมกนการจดลาดบของความเก1ยวของหนาท1ตางๆ ของฟงกชน เพ1อท1จะอนญาตใหคณใชมนใหทกชนดของวถทาง

เปนความธรรมดาแบบงายๆมนกเหมอนรายการท1วๆไป ซ1งการเขาถงขอมลจะตองมคณสมบตสองอยาง ถาคณม key คณจะสามารถเขาไปถงคาของชนดน �นไดโดยตรง มฉะน �นคณจะตองมองหามน น �นหมายถงดเหมอนวาจะทาใหเกดความยงยากในเบ �องตนเลกนอย แตคร �งหน1งคณจะตองตดอยกบมน คณจะตองจดลาดบใหมนเปนจรงและเปนส1งงายๆท1จะตองทามน

คณสามารถท1จะจดระเบยบกบมนโดยใช array โดยเปนการจดลาดบ :

<?php

$array = array ();

?>

ถาคณมความประสงคและปรารถนาส1งของใหมๆ ท1จดระเบยบตามพารามเตอร(ชนดของส1งเหลาน �น) กเหมอนดงท1ดานลางไดกลาวได :

<?php

$animals = array (" Monkey", " Lion ", " Turtle ", " Horse ");

?>

ในตวอยางน �เราสามารถเจาะจงคาของมนไดเทาน �น ถาในกรณท1key สามารถนบเปนตวเลขจานวนคาได หมายความวา เร1มตนท1 0 คาอนแรกของมนจะให key มคา = 0 และตอไปส1งท1จะทาให key มคา = 1 และทาตอไปเร1อยๆ ในการเขาถงคาเหลาน �คณสามารถทากบมนเปนจานวนได ดงน � :

<?php

$animals = array (" Monkey", " Lion ", " Turtle ", " Horse ");

echo $animals [2];

?>

Page 30: php5&mysqli

คณสามารถเจาะจง key ใหในอยกลมของประเภทของวงเลบ ในกรณน �คณสามารถท1จะเร1มตนท1ไหนกได ดวย 0 ถาเร1มตนท1 (key แรก) = 0 ได มนจะทาใหสาเรจไดโดยงาย โดยท1เราต �งคา key ไวกอน :

<?php

$animals = array (2 => " Monkey", " Lion ", " Turtle ", " Horse ");

echo $animals [2];

?>

การเร1มนบจานวนแทนท1ดวย 2 คณกสามารถท1จะใหจานวนส1งของท �งหมดดวยตวคณเอง ราวๆกบวา key น �นเปรยบเสมอนเปนหน1งเดยว บางกรณช1อของ key อาจจะทาใหมความรสกนกคดมากข �นกไมใชปญหา :

<?php

$namesAndAges = array (" John Doe " => 45, " Jane Doe " => 33, " Dog Doe " => 11);

echo " The age of Jane Doe: " . $namesAndAges [" Jane Doe "];

?>

เรากสามารถ => ต �งผกระทาท1จะมอบหมายอายของช1อ หรอ ในคาอ1นๆ คาของ key ในบางกรณคณสามารถท1จะเพ1มเตม

ทหลงได แทนท1จะกระทากบ array ดงตวอยาง :

<?php

$names = array ();

$names[] = " John Doe ";

$names[] = " Jane Doe ";

$names[] = " Dog Doe ";

echo $names[1];

?>

ถาคณมกลม set ของวงเลบท1วางๆ สามารถสราง php แตอยางเหนไดชด คณสามารถใหเทคนคจากดานบนเม1อเตม

เขาไปในการจดลาดบของ array :

Page 31: php5&mysqli

การจดเรยงลาดบของ array ท'มขนาดมากมาย

การจดลาดบตามตวอยางดานบนมส1งหน1งท1มน เปนมตเดยว มนประกอบไปดวยคาธรรมดา แตอะไรท1คณ

ตองการท1จดลาดบจะตองคงคาระหวางของ array ไว ท �งน �ท �งน �นกไมมปญหา ในความจรงแลว php ยอมใหเราไมจากด

เร1องมตของการจดลาดบของ array คณสามารถท1จะจดลาดบคาระหวางของการจดลาดบได ดงตวอยางดานลาง

<?php

$contacts = array ();

$contacts [" Friends "] = array (" Me", " John Doe ");

$contacts [" Family "] = array (" Mom", " Dad");

$contacts [" Enemies "] = array (" Stalin ", " Hitler ");

foreach ( $contacts as $categoryName => $value )

{

echo " <b>" . $categoryName . " : </ b><br /> ";

foreach ( $contacts [ $categoryName ] as $name)

{

echo $name . " <br /> ";

}

echo " <br /> ";

}

?>

ดงน �นไปดตวอยางท1มนซบซอนยงยากมากกวาน � เราเร1มท1จะสรางมนโดยตดตอจากการจดลาดบท1วางเปลา เรา

ตองการท1จะเกบช1อของบคคลท1เราตองการตดตอ การจดลาดบแรกจะตองดาเนนการในความแตกตางของช1อกลม ผ ท1ซ1ง

อยในกลมน �น เรากสามารถท1จะจดใหช1อของกลมและบคคลท1ตดตออยอสระ เปนการกระทาใหมๆ ในการจดคของบคคลท1

ตดตอ ถาผลลพธท1ดเราสามารถการวนลป 2 ลป โดยลปแรก จะใหอานทางานไดตลอดของกลม และ ลปดานในจะทางาน

ผานดานบคคล ในทานองเดยวกนเม1อคณไดเหนและไดทดสอบในเอกสารน �แลว มนกจะทาใหแบงในกลมได

Page 32: php5&mysqli

More arrays

ในบทท1ผานมา เราไดกลาวถงวธการในการสราง array และการใสคยและคาลงไปใน array ในบทน �เราจะเรยนรถงฟงกชนบางฟงกชนท1จะทาใหการดาเนนการเก1ยวกบ array งายข �น

Implode and explodeเปนฟงกชนชวยใหเราสามารถแยกอารเรยออกจากสตรง ตวอยางการใชของท �งสองฟงกชน

<?php

$values = " Rabbit|Whale|Penguin|Bird ";

$array = explode (" | ", $values );

print_r ( $array );

echo " <br />< br /> ";

$string = implode (" and ", $array );

echo $string ;

?>

อนดบแรก เราจะกาหนดสตรงเปนเซตของช1อสตว เราจะแยกมนออกจากกนดวยเคร1องหมาย ” | ” เราใชฟงกชน explode() สาหรบแยกสตรงท1มอยใหเปนอารเรย เม1อพบเคร1องหมาย “ | ” คาตอไปจะถกเพ1มเขาเปนคาใหมไปยงอารเรย เราใชฟงกชน print_r() เพ1อทดสอบ output ของอารเรยท1ไดเพ1อดวามนใชงานไดจรง ตอมาเราใชฟงกชน implode() เพ1อรวม element ท1เรากาหนดเขาไปรวมกบอารเรย ในท1น �เราใช element “and ”

เปนคาในอารเรยหรอไม? เราจะใชฟงกชน in_array() สาหรบทดสอบวาคาท1เรามอยอยในอารเรยหรอไม ดงตวอยางตอไปน �

<?php

$animals = array (" Dog", " Tiger ", " Snake ", " Goat ");

if ( in_array (" Snake ", $animals ))

echo " Snake is in the array! ";

else

echo " No snake in the array! ";

?>

Page 33: php5&mysqli

คาท'ไมซ 9า

ในบางคร �งเราดงขอมลมาจากภายนอก อยางเชน ในฐานขอมลหรอในไฟล อาจมขอมลท1ซ �ากนเกดข �น เราสามารถใชฟงกชน array_unique() โดยเม1อใชฟงกชนน �จะไดคาอารเรยท1ไมซ �ากนออกมา ดงตวอยาง

<?php

$array = array (" Dog", " Tiger ", " Snake ", " Dog");

echo " Animals in array: <br /> ";

foreach ( $array as $value )

echo $value . " <br /> ";

echo " <br /> ";

$array = array_unique ( $array );

echo " Animals in unique array: <br /> ";

foreach ( $array as $value )

echo $value . " <br /> ";

?>

การ random เลอกคาจากอารเรยเราใชฟงกชน array_rand() เปนฟงกชนท1ใชสมเลอกคาในอารเรย ออกมา โดยมวธการใชดงน � array_rand(<array>,<num random>) โดยท1 <array>= ตวแปร array ท1จดเกบคา และ

<num random>= จานวนคาท1จะสมเลอกมาตอคร �ง ตวอยางการใช

<?php

$animals = array (" Dog", " Tiger ", " Snake ", " Goat ");

$randomAnimal = $animals [ array_rand ( $animals , 1)];

echo " Random animal: " . $randomAnimal ;

?>

โดยจากตวอยางขางตน เราสมคาจากอารเรย $animal โดยกาหนดใหสมเลอกคาทละคา

Page 34: php5&mysqli

การเรยงลาดบอารเรยเราใชฟงกชน sort() เพ1อเรยงลาดบคาในอารเรย และเม1อใชฟงกชน array_reverse() คาของอารเรยกจะกลบมาเหมอน

กอนเขาฟงกชน sort()

<?php

$animals = array (" Dog", " Tiger ", " Snake ", " Goat ", " Rabbit ", " Whale ", " Bird ");

echo " Unsorted animals: " . implode (" , ", $animals );

echo " <br />< br /> ";

sort ( $animals );

echo " Sorted animals: " . implode (" , ", $animals );

echo " <br />< br /> ";

$animals = array_reverse ( $animals );

echo " Sorted animals, descending order: " . implode (" , ", $animals );

?>

Page 35: php5&mysqli

Introduction to PHP classes

ในขณะท1 classes และแนวคดท �งหมดของการเขยนโปรแกรมเชงวตถ (OOP) เปนพ �นฐานของการเขยนโปรแกรมภาษาท1ทนสมย PHP เปนการถกสรางข �นบนหลกการของการแทนท1การทางาน การสนบสนนข �นพ �นฐานสาหรบ classes น �น เปนข �นแรกในท �งหมด 4 ข �นของ PHP แตแลวกมการเขยนข �นอกคร �งสาหรบข �นท1 5 เพ1อการสนบสนน OOP ท1สมบรณมากย1งข �น วนน � PHP เปนท1แนนอนท1จะใชเพ1อทางานรวมกบ classes ในขณะท1 PHP library สวนใหญยงคงประกอบดวยฟงฟงกชน class ตอนน �ถกเพ1มเขามาเพ1อวตถประสงคตางๆ แตอยางไรกตามวตถประสงคหลกคอการเรยนเพ1อการเขยนและการใช classes ซ1งเปนส1งท1เราจะศกษาในบทตอไป

Classes ถอไดวาเปนท1เกบรวบรวมชดของกระบวนการ ตวแปร และคาคงท1 บอยคร �งท1มกจะสะทอนส1งท1เปนความจรง เชนเดยวกบ กลมของรถหรอกลมของผลไม คณสามารถประกาศ class เพยงคร �งเดยวได แตคณสามารถยกตวอยาง ไดหลายรปแบบของมนท1สามารถบรรจอยในหนวยความจา ตวอยางของ class มกจะเรยกวาเปนวตถ(Object)

หากคณยงคงสบสนอยเลกนอยเก�ยวกบ คลาสคออะไร และทาไมคณจาเปนตองใชส�งน&น

ไมตองกงวล ในบทตอไปเราจะเขยน class เบ&องตน และใชมน

หวงวาจะใหคณมแนวคดท�ดข&นของแนวคดท&งหมด

Page 36: php5&mysqli

Defining and using a class

หลงจากการแนะนาเร1อง Class ในบทกอน เรากพรอมท1จะเขยนเร1อง Class เพ1มมากข �น ซ1งถาเราจะเกบขอมลเก1ยวกบผ

ใชท1วไป ตวอยางเชน เกบขอมลของผ ใชบนเวบไซตของคณ

การนยาม Class ใน PHP มลกษณะสวยงามมาก เชน การประกาศฟงกชน แตแทนท1จะใชฟงกชน keyword เรา

กจะใช class keyword เร1มตนการใช class ของผ ใช

<?

class User

{

}

?>

น1เปนตวอยางท1งายและคณสามารถท1จะจนตนาการไดเอง และจากภาพ class น �ยงไมสามารถทาอะไรได แตเราสามารถ

ท1จะกาหนดคาท1จะทาใหเปน keyword ใหมได :

$user = new User ();

เน1องจาก Class ไมสามารถทาอะไรได จงทาให $user กเลยใชงานไมได เราจงแกไขโดยการเพ1มตวแปรลงไปท �งใน class

และ method จะไดดงภาพ :

class User

{

public $name;

public $age ;

public function Describe()

{

return $this- >name . " is " . $this- >age . " years old ";

}

}

Page 37: php5&mysqli

ตอนน �เรามตวแปร 2 ตวแลว ตอนแรกเลยเรากจะประกาศตวแปรท �งสอง ซ1งเปนของช1อ ( $name ) และ อาย ( $age ) ซ1ง

ช1อตวแปรมคานาหนาโดยการเขาถง " public " โดยท1วไปแลวจะหมายถงวาตวแปรท1สามารถเขาถงไดจากขางนอก

Class ซ1งเราจะมการเขาถงมากข �นจะอยในบทถดไป

ตอไปเราจะกาหนดฟงกชน Describe() คณสามารถมองเหนไดวามนเปนการประกาศฟงกชนปกต แตมนจะมสองตวท1

เปนตวยกเวน กคอการท1ม public อยขางหนามน เพ1อระบการเขาถง ซ1งภายฟงกชนเราสามารถใช ตวแปร "$ this" ใน

การเขาถงตวแปรของคลาสตนเองได ซ1ง $ this เปนตวแปรพเศษใน PHP ซ1งสามารถใชไดภายในฟงกชน

Class และ object อ1นๆ ท1นามาใชงาน

ตอนน �เรากใชคลาสใหม

$user = new User();

$user- >name = " John Doe ";

$user- >age = 42;

echo $user- >Describe();

ส1งแรกท1ควรจะสงเกตเหน คอการใชตวดาเนนการ “ - > ” เราจะใชใน method Describe() เชนเดยวกนและ จากตวอยาง

หมายถงวาเราตองการท1จะเขาถงบางส1งบางอยางจาก object ท1ใชกอนตวดาเนนการ $user - > name เปนเชนเดยวกบ

พดวา “ ให name เปนตวแปรบน object $user ” หลงจากน �นกเชนเดยวกบการกาหนดคาใหกบตวแปรปกต ท1เราทา

สองคร �งสาหรบช1อและอายของ object user ในบรรทดสดทายท1เราเรยกใช method Describe() ของ object user ท1ผใช

จะสงกลบสตรงของขอมล ซ1งเราสามารถ echo ออกมา ไดดงน � John Doe is 42 years old

Page 38: php5&mysqli

Constructors and Destructors

Constructors

Constructor และ Destructor เปนฟงกชนพเศษ ซ1งจะถกเรยกใชอตโนมต เม1อสรางและทาลายออบเจค

Constructor ถกใชมากท1สด เพราะ constructor ชวยใหคณสงพารามเตอรไป เม1อมการสรางออบเจคใหม ซ1งจากน �นจะ

สามารถใชตวแปรเร1มตนในออบเจค น1คอตวอยางของ class ท1ใช constructor แบบงายๆ

class Animal

{

public $name = " No-name animal ";

public function __construct()

{

echo " I'm alive! ";

}

}

Constructor มลกษณะแบบเดยวกบฟงกชนปกต ยกเวนความจรงท1วามนเร1มตนดวย underscores สองตว "__" ใน PHP ฟงกชนท1ข �นดวย underscores สองตวกอนช1อ มกจะเปนฟงกชนท1เรยกวา so-called magic คอ ฟงกชนท1มจดประสงคเจาะจงและฟงกชนการทางานพเศษ เม1อเปรยบเทยบกบฟงกชนปกต ดงน �น ฟงกชนท1มช1อท1แนนอน "__constructor" คอ ฟงกชน constructor ของ class และจะถกเรยกใชอตโนมตเม1อสรางออบเจค

Page 39: php5&mysqli

ลองทา : $animal= new Animal();

มเพยงบรรทดของ Code ท1ออบเจคจะถกสรางข �น แลว Constructor จะเรยกใชสายของ Code ในการดาเนนการ ซ1งจะทาใหเราได "I'm alive!" เปน output ออกมา อยางไรกตาม ท1กลาวมากอนหนา ประโยชนใหญของ constructor คอความสามารถในการสงผานพารามเตอรท1สามารถใชในการเร1มตนตวแปรสมาชก ลองทา :

<?php

class Animal

{

public $name = " No-name animal ";

public function __construct( $name)

{

$this- >name = $name;

}

}

$animal = new Animal(" Bob the Dog ");

echo $animal- >name;

?>

การประกาศ Constructor กบ พารามเตอร เปนเหมอนการประกาศฟงกชนปกต และการสงผานพารามเตอร (s) เปนเหมอนการเรยกฟงฟงกชนปกต แตคาหลก คอ "new" ท1แนะนากอนหนาน � Constructor สามารถมพารามเตอรมากเทาท1คณตองการ

Page 40: php5&mysqli

Destructorsdestructor จะถกเรยกเม1อตองการทาลายออบเจค ในโปรแกรมบางภาษา คณตองกาจดออบเจคท1คณสรางดวย

ตวเอง แตใน PHP มนจะจดการโดย Garbage Collector ซ1งจะชวยในการทาลายออบเจคอตโนมต เม1อไมจาเปนดงตวอยางตอไปน � ซ1งเปนการขยายตวอยางกอนหนาน � :

<?php

class Animal

{

public $name = " No-name animal ";

public function __construct( $name)

{

echo " I'm alive! ";

$this- >name = $name;

}

public function __destruct()

{

echo " I'm dead now :( ";

}

}

$animal = new Animal(" Bob");

echo " Name of the animal: " . $animal- >name;

?>

ท1คณเหน destructor กเหมอน constructor เฉพาะช1อท1แตกตางกน ถาคณลองใชตวอยางน � คณจะเหนขอความ constructor แรก แลวช1อของสตวท1เราสงออกดวยตนเองในบรรทดสดทาย และหลงจากท1สครปตส �นสดออบเจคถกทาลาย destructor ถกเรยกขอความเก1ยวกบสตวกจะไมแสดงผลออกมา

Page 41: php5&mysqli

Visibility

การมองแบบ oop สวนใหญ จะชวยใหคณสามารถควบคมระดบการเขาถงขอของสมาชกในแตละ คลาส ได ตวอยางเชน เพ1อท1จะปองกนตวแปรบางอยางท1จะไดรบการแกไขจากนอก คลาส โดยปกตการมองเหนจะเร1มตนจากการเปน public แสดงวาสมาชกทกระดบสามารถเขาถงไดซงหมายความวา กระประกาศการมองเหน เปนตวเลอกในการท1จะกาหนดผ เขาถง ขอมลน �นๆการประกาศการมองเหนจะม 3 แบบดวยกน

Private members จะเปนการเขาถงโดยตวเองเทาน9นProtected members จะเปนการเขาถงภายใน คลาส และ คลาสลก ของตนเองเทาน9น Public members ทกคนสามารถเขาถงขอมลได

Page 42: php5&mysqli

Inheritance

Inheritance เปนคณสมบตหน1งของคลาส ซ1งมการสบทอดสมาชก ใหคลาสอ1นๆสามารถใชสมาชกรวมกนได ลองจนตนาการวาคณมตวอยางของสตวประเภทตางๆ เชน แมว สนข หรออ1นๆ สตวตางๆเหลาน �มสวนประกอบบางสวนท1ทางานเหมอนกน ในทางกลบกนอาจจะมสวนท1เฉพาะเจาะจงเชนเดยวกน เชน มการสราง class Animal และสรางคลาสยอยท1เฉพาะเจาะจง แตจะมบางสวนประกอบท1เปนสวนประกอบพ �นฐานของสตวทกๆชนด

class Animal

{

public $name;

public function Greet()

{

return " Hello, I'm some sort of animal and my name is " . $this->name;

}

}

ตวอยางงายๆอกหน1ง class

{

class Dog extends Animal

}

class จะมการประกาศ regular class หลงจากท1ขยาย keyword บอกกบ PHP วาสนข inherit มาจาก class Animal สนขกจะมฟงกชนการทางานเชนเดยวกบ class Animal ตรวจสอบไดโดยดวย code ตอไปน �

$dog = new Dog();

echo $dog- >Greet();

จะเหนไดวายงคงมท �ง ช1อและฟงกชน Greet() แตยงไมมการระบช1อ ดงน �นตอไปจะเปนการระบช1อของสนขดวยฟงกชน

Page 43: php5&mysqli

class Dog extends Animal

{

public function Greet()

{

return " Hello, I'm a dog and my name is " . $this- >name;

}

}

ใหสงเกตวาเราประกาศฟงฟงกชน Greet() อกคร �ง แตตวแปร class ไมไดถกประกาศช1อ เพราะเราไดมการกาหนดไวแลว ท1 class Animal

$animal = new Animal();

echo $animal- >Greet();

$animal = new Dog();

$animal- >name = " Bob";

echo $animal- >Greet();

เราไดมการประกาศช1อของสนข ซ1งจะทาใหการ ฟงฟงกชน Greet() ซ1งเปนฟงกชนท1ใชทกทายสตวเล �ยง มความเฉพาะเจาะจงมากข �น

Page 44: php5&mysqli

Abstract classes

Abstract class เปนคลาสท1ถกออกแบบมาใหใชงาน Class Hierarchies โดยจะสราง Abstract Method คอ

Method ท1ไมมการ Implement ไวภายใน (ไมระบรายละเอยดของการทางาน) อยางนอย 1 Method (แตจะม Method

ท1ไมใช Abstract Method รวมอยดวยกได แลวให Subclass เปนผ กาหนดรายละเอยดของการทางาน ส1งท1สาคญคอ ไม

สามารถสราง Object จากคลาสชนดน �ได และ Subclass จะตองสราง Method ของตนเองทบ (Override Method)

Abstact Method ท1สบทอดมาจาก Superclass

การสราง Abstract classes จะใชคยเวอรด “abstract ” นาหนาช1อ Class สวน Abstact Method จะใช

คยเวรด “abstact” นาหนาคยเวรด Visibility ของ Method ดงน �

abstracy class class_name {

// Attribute (จะมหรอไมมกได)

abstact scope function function_name( [parameterq,...] );

//จะมก1 Method กได

// Method ท1ไมใช Abstact Method (จะมหรอไมมกได)

}

ตวอยาง

abstract class Animal

{

public $name;

public $age ;

public function Describe()

{

return $this- >name . " , " . $this- >age . " years old ";

}

Page 45: php5&mysqli

abstract public function Greet();

}

class Dog extends Animal

{

public function Greet()

{

return " Woof! ";

}

public function Describe()

{

return parent::Describe() . " , and I'm a dog! ";

}

}

$animal = new Dog();

$animal- >name = " Bob";

$animal- >age = 7;

echo $animal- >Describe();

echo $animal- >Greet();

Page 46: php5&mysqli

Static Classes

ในเร1องน �จะกลาวถง static method และ static variable static class ไมจาเปนตองสราง instance ข �นมา

สาหรบเรยกใชงาน การเรยกใชงาน จะใชช1อ class ตามดวย :: (double colon operator) จากน �นจงตามดวยช1อของ

method หรอ variable และอกอยางถงจะสราง instance ข �นมากไมทาให variable หรอ method เปล1ยนไปจากเดมเลย

ตวอยาง

class User{ public static $name; private static $age ; public static $minimumPasswordLength = 6; public static function Describe() { return self:: $name . " is " . self:: $age . " years old "; } public static function ValidatePassword( $password ) { if (strlen( $password ) >= self:: $minimumPasswordLength ) return true ; else return false ; } public static function setInfo( $name, $age ){

self:: $name = $name;self:: $age = $age ;

}}

จากโคดดานบนน 9สามารถอธบายไดดงน 9การจะสราง static classes จะตองใส keyword นาหนาช1อ method หรอ variable ภายใน class เสมอ

สวนจะกาหนด visibility(private, public,protect) อยางไรกสดแตทานจะกาหนด

ถาหากวาเปน method ภายในจะกาหนดหรอเรยกใช ส1งตางๆภายใน class สามารถใช self::<variable_name> = xxx;self::<method_name>(parameter);

การเรยกใชสามารถเรยกใชดงโคดตอไปน �$password = "123456";$className = "User";

Page 47: php5&mysqli

// การเรยกใช static method โดยสามารถกาหนดเปนตวแปรได// หรอสามารถเรยกตรงๆไดเลยคอ User::ValidatePassword($password);if($className::ValidatePassword($password)) echo "Password is valid! <br />";else echo "Password is NOT valid!<br />";

// กาหนดขอมลท �งสองตวจากภายใน

$className::setInfo("tonhom", "17");

// กาหนดขอมลของตวแปรท1เปน public

$className::$name = "tonhom";

echo $className::Describe();

// สราง object(instance) ของ User และแสดงขอมล $u = new User;

echo "<br />". $u::Describe(); // ขอมลจะยงเหมอนเดมกอนหนา

// กาหนดเพยงแคช1อ และใชช1อ object ในการอางองน �น $u::$name = "test1"; echo "<br />". $u::Describe();

// การใช className ในการอางองถง static class จรงๆ กยงสามารถทาได และคาของ name ไดเปล1ยนไปจากการกาหนดดวย instane ของ User ไปแลว ($u) echo "<br />". $className::Describe();

ผลลพธจากการเรยกใชตามโคดดานบนจะเปนดงน 9Password is valid!tonhom is 17 years oldtonhom is 17 years oldtest1 is 17 years oldtest1 is 17 years old

Page 48: php5&mysqli

Class constants

คาคงท1 เปนเหมอนกบช1อท1แสดงถงตวแปรท1ไมสามารถเปล1ยนแปลงได เม1อประกาศคาคงท1กาหนดคาใหกบมนคาจะไมเปล1ยนแปลง โดยปกตตวแปรท1ดควรงายตอการใช โดยในบางกรณคาคงท1ดกวาเชนการสงสญญาณใหโปรแกรมเมอร อ1นๆ (หรอเตอนตวคณเองในกรณท1คณลม) คาท1ระบไมควรจะมการเปล1ยนแปลงในชวงขณะท1กาลงรนอยClass constants เปนเพยงคาคงท1ท1วไปยกเวนวามการประกาศ class จงเขาถงไดผานทาง class โดยเฉพาะ เชนเดยวกบ double-colon(::) ใชกบ class กบ static member เพ1อเขาส Class constants น1เปนตวอยางพ �นฐานคอ

<?php

class User

{

const DefaultUsername = " John Doe ";

const MinimumPasswordLength = 6;

}

echo " The default username is " . User::DefaultUsername;

echo " The minimum password length is " . User::MinimumPasswordLength;

?>

ตามท1เหนกเหมอนตวแปรท1ประกาศท1วไปยกเวนมการปรบปรงการเขาถง publically คาคงท1อยเสมอทาใหไมสามารถเขาถงไดตามท1ตองการ ทนทท1เรากาหนดคาใหคาคงท1ท �งหมดกจะผานการทางานของสครปต เม1อตองการใชคาคงท1เรากเขยนช1อของคลาสตามดวยตวดาเนนการ double-colon(::) แลวช1อของคาคงท1

Page 49: php5&mysqli

The "final" keyword

ในบทท1ผานมา เราไดเหนถงวธสบทอด class จาก class อ1น นอกจากน �เรายงมองวาคณสามารถแทนท1การทางานใน class ท1สบทอดมาเพ1อแทนลกษณะการทางานเดมได อยางไรกตามในบางกรณคณอาจตองการไมให class ถกสบทอดหรอการแทนฟงฟงกชน ซ1งสามารถทาไดโดย final keyword ซ1งทาให PHP เช1อมโยนขอผดพลาด ถามคนพยายามท1จะขยาย class final ของคณหรอแทน final function ของคณ

fiinal class จะมลกษณะดงน � :

final class Animal

{

public $name;

}

class ท1ม final function จะมลกษณะดงน � :

class Animal

{

final public function Greet()

{

return " The final word! ";

}

}

ท �งสองลกษณะสามารถรวมกนได แตกสามารถใชอยางอสระตามท1เหนในตวอยางขางตน

Page 50: php5&mysqli

MySQLi

Page 51: php5&mysqli

Overview

แนะนาออพช1นตางๆ ท1มใหใชในการพฒนาแอพลเคช1น PHP ท1มการเช1อมตอกบฐานขอมล MySQL

API คออะไร ?

API หรอช1อเตมคอ Application Programming Interface เปนการกาหนด คลาส เมธอด ฟงกชน และตวแปรตางๆท1 แอพลเคช1นเรยกใชงานเพ1อใหไดผลลพธตามท1ตองการ

APIs สามารถเปน procedural หรอ object-oriented หากเปน procedural API สามารถทาการเรยกฟงกชนเพ1อหาผลลพธ หากเปน object-orient API ทาการสรางออบเจคของคลาสจากน �นเรยกใชงานเมธอดตางๆ API แบบ object-orient เปนท1ตองการมากกวาเน1องจากมความทนสมยและนาไปสการจดการโคดท1ด

เม1อทาการเขยนแอพลเคช1น PHP ท1ตองการเช1อมตอกบฐานขอมล MySQL ม API ตางๆ ใหเลอกใชงาน เอกสารน �จะแนะนาวามอะไรบางและเลอกใชอยางไรจงจะไดผลลพธท1ตรงกบความตองการของแอพลเคช1นมากท1สด

Connector คออะไร ? ในเอกสาร MySQL คาวา connector หมายถง สวนของซอฟตแวรท1ยอมใหแอพลเคช1นทาการเช1อมตอฐานขอมล MySQL โดย MySQL ไดทาการจดเตรยมตว connector สาหรบภาษาตางๆ รวมถง PHP ดวย

หาก PHP แอพลเคช1นตองการตดตอกบฐานขอมล จะตองเขยนโคด PHP เพ1อดาเนนการเช1อมตอกบฐานขอมล โดยทาการควร1ฐานขอมลและฟงกชนฐานขอมลท1เก1ยวของกน connector มความตองการวาใหมการตระเตรยม API ท1 PHP แอพลเคชนจะใช และยงจดการการเช1อมตอระหวางแอพลเคช1นและฐานขอมล เปนไปไดวา connector มการใชไลบรารตวกลางตวอ1นดวย

Driver คออะไร ? Driver เปนสวนของซอฟตแวรท1ถกออกแบบมาเพ1อใชในการตดตอชนดฐานขอมลท1กาหนดมาให ตว driver อาจจะถกเรยกวา ไลบราร อกดวย เชน MySQL Client Library หรอ MySQL Native Driver ไลบรารเหลาน �อมพลเมนตโปรโตคอลระดบลางใชในการตดตอส1อสารกบ MySQL

Page 52: php5&mysqli

Extension คออะไร ? ในเอกสาร PHP คณจะพบกบคาศพทอกคาคอ extension โคดของ PHP ประกอบไปดวยแกนหลกโดยม extension เปนตวเลอกเสรมใหกบแกนหลก extension ของ PHP ท1เก1ยวของกบ PHP ไดแก mysqli extension และ mysql extension โดย extension เหลาน �ถกอมพลเมนตโดยการใช PHP extension framework

โดยปกตแลว extension จะม API ใหโปรแกรมเมอร PHP ใชงาน อยางไรกตามบาง extension ซ1งใชงาน PHP extension framework ไมเปดเผย API แกโปรแกรมเมอร PHP เชน PDO MySQL driver extension

ม PHP API หลกๆอะไรบางสาหรบการใช MySQL?

• PHP's MySQL Extension

• PHP's mysqli Extension

• PHP Data Objects (PDO)

mysqli extension ของ PHP คออะไร mysqli extension หรอบางคร �งเรยกวา MySQL improved extension ถกพฒนาเพ1อท1จะใชคณสมบตพเศษใหมๆ ท1มใน MySQL version 4.1.3 และใหมกวา mysqli extension ถกผนวกเขามาไวใน PHP ต �งแตเวอรช1น 5

mysqli extension มขอดตางๆ ท1ปรบปรงใหดกวา mysql extension ดงน �

• Object-oriented interface

• สนบสนน Prepared Statements

• สนบสนน Multiple Statements

• สนบสนน Transactions

• ปรบปรงขดความสามารถตางๆ ในการทาดบ�ก

• สนบสนนเซรฟเวอรแบบฝง

Page 53: php5&mysqli

PDO คออะไร ? PHP Data Objects หรอ PDO เปนช �นนามธรรมของฐานขอมลสาหรบแอพลเคช1น PHP โดยPDO จดเตรยม API สาหรบแอพลเคช1น PHP โดยไมคานงถงฐานขอมลท1ตองการเช1อมตอ ในทางทฤษฎแลว สามารถทาการสบเปล1ยนฐานขอมลท1ใชอย เชน จาก Firebird ไปเปน MySQL โดยทาการเปล1ยนแปลงโคด PHP เพยงเลกนอย

ช �นนามธรรมฐานขอมลยงรวมถง JDBC สาหรบ Java และ DBI สาหรบ Perl

ในขณะท1 PDO มขอดตางๆมากมาย เชน สะอาด, งาย, ม API ท1พกพาได ขอเสยหลกของมนกคอวา ไมยอมใหคณใชคณสมบตพเศษท �งหมดท1มอยใน MySQL เวอรชนลาสด ตวอยางเชน PDO ไมยอมใหคณใช Multiple Statements

PDO MYSQL driver คออะไร ?

PDO MYSQL driver ไมใช API ในมมมองของ PHP โปรแกรมเมอร แต PDO MYSQL driver อยในช �นระดบลาง PDO และทาการจดเตรยมฟงกชนตางๆ ของ MySQL โปรแกรมเมอรยงคงเรยน PDO API แต PDO ใช PDO MYSQL driver ในการเช1อมตอกบ MySQL server

PDO MYSQL driver เ ปนหน1 ง ในหลายๆ driver ท1 มอย ยง ม PDO driver ตว อ1นๆท1 ม ไ วสา ห รบ Firebird และ PostgreSQL

MySQL Native Driver ของ PHP คออะไร ?

เพ1อท1จะทาการเช1อมตอกบฐานขอมล MySQL ท �ง mysql extension, mysqli extension และ PDO MYSQL driver ตางกใชไลบรารระดบลางในการอมพลเมนตโปรโตคอลท1ตองการ ในอดตไลบรารท1มใหใชคอ libmysql

อยางไรกตาม อนเทอรเฟซท1มใน libmysql ไมเหมาะกบการเช1อมตอดวยแอพลเคช1น PHP เพราะ libmysql โดยด �งเดมแลวถกออกแบบมาสาหรบแอพลเคช1นของ C ดวยเหตผลน � MySQL Native Driver, mysqlnd จงถกออกแบบมาใหใชกบแอพลเคช1น PHP

ท �ง mysql extension, mysqli extension และ PDO MySQL driver สามารถต �งคาใหใชไดท �ง libmysql หรอ mysqlnd

Page 54: php5&mysqli

เปรยบเทยบคณสมบตหนาท'ของวธการท 9งสามวธในการเช'อมตอ MySQL ดวย PHP

PHP's mysqli Extension

PDO (Using PDO MySQL Driver and MySQL Native Driver)

PHP's MySQL Extension

PHP version introduced 5.0 5.0 Prior to 3.0Included with PHP 5.x yes yes Yes

MySQL development statusActive development

Active development as of PHP 5.3

Maintenance only

Recommended by MySQL for new projects

Yes - preferred option

Yes No

API supports Charsets Yes Yes NoAPI supports server-side Prepared Statements

Yes Yes No

API supports client-side Prepared Statements

No Yes No

API supports Stored Procedures Yes Yes NoAPI supports Multiple Statements Yes Most NoSupports all MySQL 4.1+ functionality

Yes Most No

Page 55: php5&mysqli

Dual procedural and object-oriented interface

กระบวนการ dual และ interface แบบ object-orientedMySQLi เพ1มความสามารถในการใช interface แบบ dual ซ1งรองรบวธการ และ การเขยนโปรแกรมแบบ

object-orientedผใชงานท1เปล1ยนจากสวนขยายของ MySQL แบบเ อาจจะชอบ interface แบบ procedural interface แบบ

procedural งายตอการใชสวนขยาย MySQL แบบเกา ในหลายกรณ ช1อของฟงกช1นจะแตกตางกนโดยเฉพาะ prefix ฟงฟงกชน MySQL บาง ฟงฟงกชนใชในการจดการการเช1อมตอกบ argument แรกของพวกเขา ในขณะท1 ฟงกช1นท1ตรงกนในอนเทอรเฟสของ MySQL แบบเกาจะใชเปนอารกวเมนตลาสดท1ไมจาเปน

Example #1 Easy migration from the old mysql extension<?php

$mysqli = mysqli_connect ( "example.com", "user", "password", "database" );$res = mysqli_query ( $mysqli , "SELECT 'Please, do not use ' AS _msg FROM DUAL" );$row = mysqli_fetch_assoc ( $res );echo $row [ '_msg' ];

$mysql = mysql_connect ( "localhost", "root" , "" );mysql_select_db ( "test" );$res = mysql_query ( "SELECT 'the mysql extension for new developments.' AS _msg FROM DUAL", $mysql );$row = mysql_fetch_assoc ( $res );echo $row [ '_msg' ];

?>

output: Please, do not use the mysql extension for new deve lopments.

Interface แบบ object-oriented นอกเหนอจาก procedural interface แบบเกา ผ ใชสามารถเลอกใช object-oriented interface เอกสาร

ประกอบ ถกทาข �นเปนคมอการใช object-oriented interface object-oriented interface แสดงฟงกชนท1จดกลมโดยจดประสงคของแตละฟงกชน ทาใหงายในการเร1มตน ในสวนการอางองอาจจะใหตวอยางสาหรบท �งสองไวยกรณ

ประสทธภาพไมมความแตกตางกนระหวางสองอนเทอรเฟสน � ผ ใชสามารถเลอกตามความพอใจ

Example #2 Object-oriented and procedural interface<?php$mysqli = mysqli_connect("example.com", "user", "pa ssword", "database");if (mysqli_connect_errno($mysqli)) { echo "Failed to connect to MySQL: " . mysqli_co nnect_error();}

$res = mysqli_query($mysqli, "SELECT 'A world full of ' AS _msg FROM DUAL");$row = mysqli_fetch_assoc($res);

Page 56: php5&mysqli

echo $row['_msg'];

$mysqli = new mysqli("example.com", "user", "passwo rd", "database");if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli-> connect_error;}

$res = $mysqli->query("SELECT 'choices to please ev erybody.' AS _msg FROM DUAL");$row = $res->fetch_assoc();echo $row['_msg'];?>

output: A world full of choices to please everybody.

object oriented interface ถกใชสาหรบ quickstart เพราะสวนอางองมการจดเอาไว

รปแบบผสมมนเปนไปไดท1จะสลบไปมาระหวางรปแบบในเวลาใดกได ผสมรปแบบท �งไมแนะนาสาหรบ code clarity และ

การเขารหสรปแบบเหตผล

Example #3 Bad coding style<?php$mysqli = new mysqli("example.com", "user", "passwo rd", "database");if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli-> connect_error;}

$res = mysqli_query($mysqli, "SELECT 'Possible but bad style.' AS _msg FROM DUAL");if (!$res) { echo "Failed to run query: (" . $mysqli->errno . ") " . $mysqli->error;}

if ($row = $res->fetch_assoc()) { echo $row['_msg'];}?>

output:

Possible but bad style.

Page 57: php5&mysqli

Connections

MySQL server สนบสนนการสงขอมลระหวางช �นท1แตกตางกนสาหรบการเช1อมตอ การเช1อมตอจะใช TCP/IP ยนกสจะ

ใช Sockets หรอ วนโดสจะใช Pipes

localhost เปนโฮสตท1มความพเศษซ1งจะใชกบ Unix domain sockets และจะไมสามารถเปดใชงานแบบ

TCP/IP ไดโดยจะตองใช localhost ท1มช1อโฮสต 127.0.0.1 แทน

Example #1 Special meaning of localhost

โดย user ใหใส ช1อท1ใชในการตดตอฐานขอมล password คอ รหสในการคดตอฐานขอมล database คอ ช1อของฐานขอมลท1ตองการใชงาน port 3306 คอ หมายเลข port ของ MySql

ถาตดตอฐานขอมลได จะแสดงดงน 9

output:

Localhost via UNIX socket

127.0.0.1 via TCP/IP

ซ1งกคอ localhost มการตดตอแบบ Unix socket และ 127.0.0.1 มการตดตอแบบ TCP/IP

Page 58: php5&mysqli

คาเร มตนของพารามเตอรในการเช อมตอท �งน �ข �นอยกบการเช1อมตอการใชงานตางๆ พารามเตอรสามารถละเวนได แลวจะมการกาหนดเปนคาพ �นฐานของ

php

Example #2 Setting defaults

Built-in connection library defaults ถา host ไมมการกาหนดคาหรอเปนคาวาง client library จะมการกาหนดคาเร1มตนของการเช1อมตอของ Unix

socket เปน localhost ถา socket ไมมการกาหนดคาหรอเปนคาวางและ Unix socket ตองการคาน �นๆการเช1อมตอเร1มตนของ socket จะอยท1 /tmp/mysql.sock บนวนโดส จะอยท1 \\.\pipe\MySQL และคาเร1มตนของ port จะถกกาหนดท1พอรต 3306 ซ1งเปนพอรตของ MySql

Page 59: php5&mysqli

Executing statements

การรนคาส'งคาส1งสามารถดาเนนการดวย ฟงกชน mysqli_query (), mysqli_real_query () และ mysqli_multi_query แต

ฟงกชน() mysqli_query () มกจะถกใชเปนสวนใหญ และรวมตวการดาเนนการคาส1งกบบฟเฟอรเรยกชดผลลพธของมนถามเพยงหน1งคาส1งควรเรยกใช mysqli_query() มนเหมอนกบการเรยกใช mysqli_real_query() ตามดวย mysqli_store_result ()

mysqli_multi_query () เปนฟงกชนท'ใชกบหลายคาส'ง

Example #1 Bad coding style

บฟเฟอรชดผลลพธ

หลงจากท1ผลการเรยกคาส1งท1สามารถเรยกดไดท1หน1งคร �งท1มบฟเฟอรโดย Client หรอโดยการอานทละแถว ชดผลลพธบฟเฟอรดาน Client จะชวยใหเซรฟเวอรไปยงแหลงขอมลท1เก1ยวของกบผลของคาส1งโดยเรวท1สด ดงน �น จะแนะนาใหใชชดผลลพธบฟเฟอร mysqli_query () รวมท �งการเรยกคาส1งและกาหนดผลบฟเฟอร

โปรแกรม PHP สามารถนาทางไดอยางอสระผานผลบฟเฟอรนารองซ1งเปนไปอยางรวดเรวเพราะชดผลลพธท1จะมข �นในหนวยความจาไคลเอนต โปรดจาไววามนมกจะงายตอการปรบขนาดโดยไคลเอนตมากกวาการปรบขนาดโดยเซรฟเวอร

Page 60: php5&mysqli

Example #2 Navigation through buffered results (การนาทางผานผลลพธของบฟเฟอร)

output

Reverse order... id = 3 id = 2 id = 1Result set order...

id = 1 id = 2 id = 3

ชดผลลพธ Unbuffered

หากหนวยความจาไคลเอนตเปนแหลงขอมลท1มระยะส �นและเปนอสระกบทรพยากรเซรฟเวอรชดผลลพธ Unbuffered สามารถนามาใชได

การเล'อนผานชดผลลพธ Unbuffered เปนไปไมไดกอนท'แถวท 9งหมดจะไดรบการอาน

Page 61: php5&mysqli

Example #3 Navigation through buffered results (การนาทางผานผลลพธของบฟเฟอร)

<?php$mysqli->real_query("SELECT id FROM test ORDER BY id ASC");

$res = $mysqli->use_result();

echo "Result set order...\n";while ($row = $res->fetch_assoc()) {

echo " id = " . $row['id'] . "\n";}

?>

ชดผลลพธชนดคาของขอมลฟงกชน mysqli_query (), mysqli_real_query () และ mysqli_multi_query () จะใชในการดาเนนการ

คาส1งท1 non-prepared ท1ระดบ MySQL Client Server Protocol คาส1ง COM_QUERY และโปรโตคอลขอความท1ใชสาหรบเรยกคาส1ง ดวยโปรโตคอลขอความ MySQL เซรฟเวอร แปลงขอมลท �งหมดของชดผลลพธเปนสตรงกอนท1จะสงการแปลงน �ไปกระทาโดยไมคานงถงผลชดชนดคอลมนขอมล SQL MySQL หองสมดลกคาไดรบคาในคอลมนท �งหมดเปนสตรง

MySQL ไลบรารไคลเอนตไดรบคาในคอลมนท �งหมดเปนสตรงเพ1อแปลงกลบไปเปนคอลมนชนดพ �นเมองของพวกเขาโดยแทนคาท �งหมดท1มใหเปนสตรง PHP

Example #4 Text protocol returns strings by default (สงกลบสตรงโดยคาเร1มตน)

output

id = 1 (string)

label = a (string)

Page 62: php5&mysqli

มนเปนไปไดในการแปลงจานวนเตมและคอลมนลอยกลบไปยงหมายเลข PHP โดยการต �งคาตวเลอกการเช1อมตอ MYSQLI_OPT_INT_AND_FLOAT_NATIVE ถาใชไลบราร mysqlndหากต �งคาไลบราร mysqlnd จะตรวจสอบผลของชดขอมลประเภท Meta คอลมนและแปลงคอลมนตวเลข SQL ใหเปนตวเลข PHP ดวยวธน � ตวอยางเชน SQL คอลมน INT จะกลบมาเปนจานวนเตม

Example #5 Native data types with mysqlnd and connection option

(ชนดขอมล Native ท'ม mysqlnd และตวเลอกการเช'อมตอ)

output

id = 1 (integer)

label = a (string)

Page 63: php5&mysqli

Prepared Statements

ฐานขอมล MySQL สนบสนน การเตรยมคาส1ง หรอคาส1งพารามเตอรท1ใชในการรนคาส1งเดมซ �าๆ โดยมประสทธภาพสง

กระบวนการทางานข 9นพ 9นฐาน

การเตรยมคาส1งประกอบดวยการปฏบต 2 ข �นตอนดวยกน กคอการเตรยมความพรอมและการดาเนนการ โดยการเตรยมความพรอม แมแบบของคาส1งจะถกไปยงเซรฟเวอรฐานขอมล เซรฟเวอรทาการตรวจสอบรปแบบและทาการเร1มตนทรพยากรภายในเซรฟเวอรสาหรบการใชงานในภายหลง

Example #1 First stage: prepare (การเตรยมความพรอม)

การเตรยมจะตามดวยการดาเนนการในชวงดาเนนการ client ผกคาพารามเตอรและสงตวมนเองไปยง server server จะ

สรางคาส1งจากแมแบบคาส1งและคาจากดเพ1อดาเนนการไดโดยใชสรางไวกอนหนาทรพยากรภายใน

Example #2 Second stage: bind and execute (การผกคาและการดาเนนการ)

การดาเนนการซ �าคาส1งท1ถกเตรยมสามารถดาเนนการซ �าๆ เม1อมการดาเนนการทกคาปจจบนของตวแปรจากดจะถก

ประเมนและสงไปยง server คาส1งท1ไมไดการแจงอกคร �ง แมแบบคาส1งไมถกโอนไปยง server

Page 64: php5&mysqli

Example #3 INSERT prepared once, executed multiple times (การดาเนนการหลายคร9ง)

ทกคาส1งท1ถกเตรยมครองทรพยากร server คาส1งควรจะถกปดอยางชดเจนในทนทหลงจากท1ใช ถาไมไดทาใหชดเจนคา

ส1งจะถกปดเม1อคาส1งเปนอสระโดย PHP การใชคาส1งท1ถกเตรยมไวจะไมใชวธวธท1มประสทธภาพมากท1สดของการรนคา

ส1ง การเตรยมคาส1ง ดาเนนการเพยงคร �งเดยวทาให client-server เพ1มเตมตลอดการเดนทางกวาคาส1งท1ไมไดถกเตรยม น1

คอเหตผลท1เลอกไมถกใชเปนคาส1งเตรยมไวขางตน

ยงพจารณาการใช MySQL การเพ1ม ไวยากรณ SQL สาหรบการแทรก ตวอยางเชนการเพ1มหลายๆคร �ง จาเปนตอง

วนไปกลบนอยระหวาง client กบ server มากกวาการเตรยมคาส1ง

Page 65: php5&mysqli

output

array(4) { [0]=>

array(1) {

[0]=>

string(1) "1"

}

[1]=>

array(1) {

[0]=>

string(1) "2"

}

[2]=>

array(1) {

[0]=>

string(1) "3"

}

[3]=>

array(1) {

[0]=>

string(1) "4"

}

}

Example #4 Less round trips using multi-INSERT SQL (การเพ'มลงใน SQL)

MySQL Server Client กาหนดท1แตกตางกนโปรโตคอลการถายโอนขอมลสาหรบการเตรยมคาส1งและคาส1งท1ไมไดเตรยม

คาส1งท1ถกเตรยมกาลงใชโปรโตคอลแบบไบนารท1เรยกวาเซรฟเวอร MySQL สงขอมลชดผล "as is" ในรปแบบไบนาร ผล

การคนหาจะไมตอเน1องกนเปนสตรง การแปลงคาเปนท1เหมาะสม PHP ชนดขอมล ตวอยางเชนผลลพธท1ไดจากคอลมน

INT SQL จะมการจดเปนตวแปร PHP จานวนเตม

Example #5 Native datatypes (ประเภทขอมลของภาษา)

ลกษณะการทางานน �แตกตางจากคาส1งท1ไมไดถกเตรยมไว โดยคาเร1มตนของคาส1งท1ไมไดถกเตรยมไวจะสงกลบคา

ผลลพธท �งหมดท1เปนสตรง คาเร1มตนน �สามารถเปล1ยนแปลงไดโดยใชตวเลอกการเช1อมตอ หากตวเลอกการเช1อมตอท1ใช

จะไมมความแตกตางกน

Page 66: php5&mysqli

Example #6 Output variable binding (ตวแปร Output ท'มความสมพนธกน)

ผลลพธของคาส1งไมไดถกเรยกและถกโอนจาก server ไปยง client สาหรบบฟเฟอรฝ1ง client หาก client ไมสามารถเรยก

ผลลพธท �งหมดหรอ client ท1ปดคาส1งกอนท1จะมการเรยกขอมลท �งหมดขอมลจะตองมการเรยกโดยปรยายโดย mysqli

output id = 1 (integer), label = a (string)

Page 67: php5&mysqli

Example #7 Using mysqli_result to fetch results (การใช mysqli_result เพ'อเรยกผลลพธ)

การใชอนเตอรเฟซ mysqli_result เสนอประโยชนเพ1มจากผลลพธท1มความยดหยนฝ1ง client นาทาง

output

array(1) { [0]=>

array(2) {

[0]=>

int(1)

[1]=>

string(1) "a"

}

}

Page 68: php5&mysqli

Example #8 Buffered result set for flexible read out (ผลลพธบฟเฟอร)

คาแนะนาจะตองใหกบเซรฟเวอรสาหรบประเภทของตวแปรท1ถกผกไวเพ1อสรางการแปลงท1เหมาะสม ดฟงฟงกชน

mysqli_stmt_bind_param () สาหรบขอมลเพ1มเตม

Page 69: php5&mysqli

Stored Procedures

โปรแกรม MySQL database รองรบ stored procedures. stored procedure คอกลมคาส1ง SQL ท1เกบไวใน database engine สามารถเรยกใชงานภายหลงโดยโปรแกรมตางๆ triger หรอแมแต stored procedure อ1นๆ หรอเรยกใชงานตวเองได (recursive stored procedure)

parameterStored procedures สามารถม IN, INOUT and OUT พารามเตอร ข �นอยกบเวอรช1นของ MySQL หนาจอการ

แสดงผลของ mysqli ไมมอะไรพเศษสาหรบความตางของพารามเตอร

IN parameterการปอนคาดวยคาส1ง CALL ตองแนใจวามคาท1ถกตอง

Example #1 Calling a stored procedure

output

array(1) { ["id"]=>

string(1) "1"

}

Page 70: php5&mysqli

INOUT/OUT parameter

คาของพารามเตอร INOUT/OUT ท1มการเขาถงดวยชดตวแปลหลายตวแปร

Example #2 Using session variables

output

Hi!

นกพฒนาแอพลเคชนและเฟรมเวรคอาจจะสามารถท1จะใหความสะดวกของ API โดยใชการผสมระหวางชดตวแปรและการตรวจสอบ databased catalog

Handling result setsStored procedures สามารถกลบไปเปนชดของผลสรป. ชดของผลสรปท1ถกแปลงมาจาก stored procedure ไมสามารถเรยกใช mysqli_query() ฟงฟงกชน mysqli_query() เปนการผสมผสานการเรยกใชคาส1งและคาส1งผลสรปแรกไปยงชดผลสรปของบพเฟอร (ถาม) อยางไรกตาม มส1งท1เพ1มเตมคอชดผลสรปของ stored procedure ซอนตวจากยสเซอร ซ1งสาเหตท1 mysqli_query() ผดพลาดจากชดสรปท1ยสเซอรคาดหวงไว

ชดของผลสรปถกเรยกจาก stored procedure

โดยใช mysqli_real_query() หรอ mysqli_multi_query(). ท �งสองฟงฟงกชนน �อนญาตการเรยกเลขใดๆจากการคนคาจากชดผลสรป เชนเดยวกบ CALL การลมเหลวในการเรยกชดผลสรปท �งหมดท1คนคามาจากสาเหต stored procedure น �น error.

Page 71: php5&mysqli

Example #3 Fetching results from stored procedures

output

---array(3) {

[0]=>

array(1) {

[0]=>

string(1) "1"

}

[1]=>

array(1) {

[0]=>

string(1) "2"

}

[2]=>

array(1) {

[0]=>

string(1) "3"

}

}---

array(3) { [0]=>

array(1) {

[0]=>

string(1) "2"

}

[1]=>

array(1) {

Page 72: php5&mysqli

[0]=>

string(1) "3"

}

[2]=>

array(1) {

[0]=>

string(1) "4"

}

}

การเตรยมการเรยกใชคาส'ง

ไมมอะไรพเศษในการเตรยมการเรยกใชรปแบบคาส1งเพ1อเรยกผลสรปจาก stored procedure เดยวกน จะเตรยมการคาส1งหรอไมไดเตรยมการน �นมคาเทากน

เตอน : MYSQL บางเวอรชนไมรองรบการเตรยมการสาหรบคาส1ง CALL SQL

Example #4 Stored Procedures and Prepared Statements

Of course, use of the bind API for fetching is supported as well.

Page 73: php5&mysqli

Example #5 Stored Procedures and Prepared Statements using bind API

Page 74: php5&mysqli

Multiple Statements

ทางเลอกของ MySQL ชวยใหม multiple statements ในหน1ง statement string การสง multiple statements

ในแตละคร �งจะลดการเดนทางของ client-server แตจะตองมการจดการเปนพเศษ

Multiple statements หรอ multi queries จะตองถกดาเนนการโดย mysqli_multi_query() แตละสวนของ

statements ของ statement string จะถกแบงโดยเคร1องหมาย semicolon หลงจากน �น ชดผลลพธท �งหมดท1ถกสงกลบ

โดย statements ท1กาลงทางานอยจะถกเรยก

เซรฟเวอร MySQL จะชวยใหม statements ท1จะสงชดผลลพธกลบ และ statements ท1ไมสงชดผลลพธกลบ ใน

หน1ง multiple statement.

Example #1 Multiple Statements

<?php$mysqli = new mysqli("example.com", "user", "password", "database");

if ($mysqli->connect_errno) {

echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;

}

if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli->query("CREATE TABLE test(id INT)")) {

echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;

}

$sql = "SELECT COUNT(*) AS _num FROM test; ";

$sql.= "INSERT INTO test(id) VALUES (1); ";

$sql.= "SELECT COUNT(*) AS _num FROM test; ";

if (!$mysqli->multi_query($sql)) {

echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;

}

do {

if ($res = $mysqli->store_result()) {

var_dump($res->fetch_all(MYSQLI_ASSOC));

$res->free();

}

} while ($mysqli->more_results() && $mysqli->next_result());

?>

Page 75: php5&mysqli

output

array(1) { [0]=>

array(1) {

["_num"]=>

string(1) "0"

}

}

array(1) { [0]=>

array(1) {

["_num"]=>

string(1) "1"

}

}

การพจารณาความปลอดภย

API ฟงกชน mysqli_query() และ mysqli_real_query() ไมสามารถ set connection flag necessary สาหรบ

การใช multi queries ใน เซรฟเวอร การเรยกสวนเสรม API ถกใชสาหรบ multiple statements ในการลด likeliness ของ

อบตเหตจากากรโจมต SQL injection การโจมตจะพยายามท1จะเพ1ม statements เชน DROP DATABASE mysql or ;

SELECT SLEEP(999) ถาการโจมตประสบความสาเรจในการเพ1ม SQL ไปยง statement string แต

mysqli_multi_query จะไมถกเรยกใช เซรฟเวอรจะไมมการทางานคร �งท1สอง และ SQL statement ท1เปนอนตราย

Example #2 SQL Injection

<?php$mysqli = new mysqli("example.com", "user", "password", "database");

$res = $mysqli->query("SELECT 1; DROP TABLE mysql.user");

if (!$res) {

echo "Error executing query: (" . $mysqli->errno . ") " . $mysqli->error;

}

?>

output

Error executing query: (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax

to use near 'DROP TABLE mysql.user' at line 1

Page 76: php5&mysqli

API support for transactions

MySQL server สนบสนนการทา Transactions ท1ข �นอยกบเคร1องมอท1ใชในการจดเกบ ต �งแต MySQL5.5 เคร1องมอท1ใชเกบเร1มตนคอ InnoDB ซ1ง InnoDB ท1มACID จะสนบสนนการทา Transactions

Transactions ท1สามารถควบคมการใชงานเรยกวา SQL หรอ API เราจะแนะนา ใหใช API สาหรบการเปดและ

ปดใชงานในโหมดอตโนมตและใชสาหรบนา Transactions กลบมาใชใหม

Example #1 Setting auto commit mode with SQL and through the API

(การต 9งคาในโหมดอตโนมตสาหรบ SQL และผาน API)

<?php$mysqli=new mysqli("example.com", "user","password","database");

if($mysqli->connect_errno) {

echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;

}

/* Recommended: using API to control transactional settings */

$mysqli->autocommit(false);

/*Won't be monitored and recognized by the replication and the load balancing plugin */

if (!$mysqli->query('SET AUTOCOMMIT = 0')) {

echo "Query failed: (" . $mysqli->errno .") " . $mysqli->error;

}

?>

คณลกษณะเพ1มเตมของแพกเกจ เชน การจาลองแบบและปล�กอนในการโหลดใหสมดล สามารถตรวจสอบ API ไดงาย

เปนโปรเสรมในการจาลองท1สมดล ถามการควบคมท1เรยกวา API เราจะไมสามารถควบคมการทางานใหสมดลได ถาคา

ส1ง SQL ถกใชสาหรบการต �งคาอตโนมตในขณะทางานอยหรอการยอนกลบมาทา Transaction ใหม

Example #2 Commit and rollback

<?php

$mysqli = new mysqli("example.com", "user", "password", "database");

$mysqli->autocommit(false);

$mysqli->query("INSERT INTO test(id) VALUES (1)");

$mysqli->rollback();

$mysqli->query("INSERT INTO test(id) VALUES (2)");

$mysqli->commit();

?>

โปรดทราบวา MySQL Sever ไมสามารถยอนกลบไปไดท �งหมด การกระทาบางอยางจะทาใหเกดการบนทกโดยปรยาย

Page 77: php5&mysqli

Metadata

Metadata คอ คาอธบายขอมล หรอขอมลท1บอกรายละเอยดของขอมล (data about data) เพ1อใหเราทราบวาขอมลท1เราไดรบน �นมนคออะไร

นอกจากทาใหเราเขาใจแลว metadata กเปนส1งท1ชวยทาใหเคร1องคอมพวเตอรสามารถเขาใจถงขอมลท1มนไดรบดวยเชนกน

metadata ไมไดถกคดคนมาเพ1อใชงานกบเวบเพจ เพราะแรกเร1มเดมทน �น metadata ไดถกใชในกลมพฒนาฐาน

ขอมลท1อางองถงสารสนเทศในหองสมดเพ1อให บรรณารกษไดใชในการจดการระบบหองสมด ซ1งถาหากจะวาไปแลวเราก

อาจเปรยบเทยบไดวา เวบเพจตางๆ น �นเปรยบเสมอนหองสมดโลกขนาดใหญ ดวยเหตผลน �เองจงไดมแนวความคดใน

การนา metadata มาประยกตใชกบเวบเพจตางๆ

Example #1 Accessing result set meta data

output

array(2) { [0]=>

object(stdClass)#3 (13) {

["name"]=>

string(4) "_one"

["orgname"]=>

string(0) ""

["table"]=>

string(0) ""

["orgtable"]=>

string(0) ""

["def"]=>

string(0) ""

["db"]=>

string(0) ""

["catalog"]=>

string(3) "def"

["max_length"]=>

int(1)

["length"]=>

int(1)

["charsetnr"]=>

int(63)

["flags"]=>

int(32897)

Page 78: php5&mysqli

["type"]=>

int(8)

["decimals"]=>

int(0)

}

[1]=>

object(stdClass)#4 (13) {

["name"]=>

string(4) "_two"

["orgname"]=>

string(0) ""

["table"]=>

string(0) ""

["orgtable"]=>

string(0) ""

["def"]=>

string(0) ""

["db"]=>

string(0) ""

["catalog"]=>

string(3) "def"

["max_length"]=>

int(5)

["length"]=>

int(5)

["charsetnr"]=>

int(8)

["flags"]=>

int(1)

["type"]=>

int(253)

["decimals"]=>

int(31)

}

}

Prepared statements

Example #2 Prepared statements metadata

Page 79: php5&mysqli

บรรณานกรม

http://www.php5-tutorial.com/

http://www.php.net/manual/en/mysqli.quickstart.php