810 likes | 1.04k Views
โดย อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com. Lec10 :: PHP กับการเชื่อมต่อฐานข้อมูล MySQL ( MySQL DATABASE FUNCTION ). MySQL DATABASE FUNCTION.
E N D
โดย อ. นัฐพงศ์ ส่งเนียมhttp://www.siam2dev.com Lec10 :: PHP กับการเชื่อมต่อฐานข้อมูล MySQL ( MySQL DATABASE FUNCTION )
MySQL DATABASE FUNCTION MySQL เป็นระบบฐานข้อมูลที่ใช้งานร่วมกับ PHP หาใช้ได้ง่ายระบบมีประสิทธิ์ภาพสูงและเป็นแบบ RDBMS(ralational database management system)
ระบบฐานข้อมูลที่ PHP สามารถเชื่อมต่อได้ OracleSybase mSQL MySQL Solid ODBC PostgreSQL Adabas D FilePro Velocis Informix dBase Unix dbm
PHP ทำงานร่วมกับ MySQL ได้อย่างไร การที่ภาษา PHP นั้นจะสามารถติดต่อกับฐานข้อมูลใดได้ต้องมีการกำหนด option ( --with-mysql ) ในการ compile ของ PHP แต่ก่อนที่จะ compile ภาษา PHP ให้ติดต่อกับระบบฐานข้อมูลใดควรที่จะติดตั้งระบบฐานข้อมูลนั้นให้สำเร็จก่อน
คำสั่ง SQL เบื้องต้น • คำสั่ง SQL (structure query language) เป็นคำสั่งที่ใช้ในการติดต่อกับระบบฐานข้อมูล เพื่อ • อ่านข้อมูล • แก้ไขข้อมูล • เพิ่มข้อมูล • การลบข้อมูล
คำสั่ง SQL (ต่อ) คำสั่งที่ใช้อ่านข้อมูล SELECT [ALL | DISTINCT] select_list [INTO new_table_] FROM table_source [WHERE search_condition] [GROUP BY group_by_expression] [HAVING search_condition] [ORDER BY order_expression [ASC | DESC] ]
คำสั่ง SQL ? (ต่อ) คำสั่งที่ใช้แก้ไขข้อมูล UPDATE { table_name WITH ( <table_hint_limited> […n]) | view_name | rowset_function_limited } SET Column_name = { expression | DEFAULT | NULL } { [FROM {<table_source>} [,…n] [ WHERE <search_condition>] }
คำสั่ง SQL ? (ต่อ) คำสั่งที่ใช้เพิ่มข้อมูล INSERT [INTO] { table_name WITH ( <table_hint_limited> […n]) | view_name | rowset_function_limited } { [(column_list)] { VALUES { ( DEFAULT | NULL | expression } [,…n] ) | derived_table | execute_statement } }
คำสั่ง SQL ? (ต่อ) คำสั่งที่ใช้ลบข้อมูล DELETE [FROM] { table_name WITH ( <table_hint_limited> […n] ) | view_name |rowset_function_limited } [FROM {<table_source>} […n] ] [WHERE <search_condition> ]
ฟังก์ชันที่ใช้ติดต่อ MySQL • การนำ PHP ไปใช้เพื่อติดต่อกับระบบฐานข้อมูลนั้นทำได้ง่าย เพราะ PHP ได้เตรียมฟังก์ชันที่ใช้สำหรับการติดต่อไว้แล้ว โดยฟังก์ชันที่เตรียมไว้จะแบ่งตามระบบฐานข้อมูลที่แตกต่างกัน • mysql_connect • mysql_affected_rows • mysql_create_db • mysql_data_seek
mysql_connect • เป็นฟังก์ชันที่ใช้ในการติดต่อกับระบบฐานข้อมูลของ MySQL รูปแบบของคำสั่ง int mysql_connect(string hostname, string username, string password) ; hostname คือเครื่องที่ติดตั้งระบบฐานข้อมูลของ MySQL username คือ ซื่อของผู้ใช้ที่มีสิทธิ์เข้าใช้ระบบฐานข้อมูลของ MySQL password คือ รหัสผ่านของ username
mysql_close • เป็นฟังก์ชันที่ใช้ยกเลิกการติดต่อกับระบบฐานข้อมูล รูปแบบของคำสั่ง int mysql_close(int link_identifier); link_identifier
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ MySQL $link = mysql_connect(“localhost”,”root”,””); if($link) { echo “ติดต่อระบบฐานข้อมูลของ MySQL ได้สำเร็จ<br>”; } else { echo “ไม่สามารถติดต่อระบบฐานข้อมูลของ MySQL ได้<br>”; } if ($link) { //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); echo “ยกเลิกการติดต่อกับระบบฐานข้อมูลแล้ว”; } ?>
mysql_create_db • เป็นฟังก์ชันที่ใช้สร้างฐานข้อมูล(database) รูปแบบของคำสั่ง int mysql_create_db( string databasename, int link_identifier) ; ต.ย. คำสั่ง $MyCon = mysql_connect(“localhost”,”root”,””); mysql_create_db( “MyDB”, $MyCon) ;
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ MySQL $link = mysql_connect(“localhost”,”root”,””); //สร้างฐานข้อมูลซื่อ test_db $chk = mysql_create_db(“test_db”,$link); //ตรวจสอบว่าสร้างฐานข้อมูล test_db ได้สำเร็จหรือไม่ if($chk) { echo “ฐานข้อมูล test_db สร้างได้สำเร็จ”; } else { echo “ไม่สามารถสร้างฐานข้อมูล test_db ได้”; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_affected_rows • ใช้ตรวจสอบว่าคำสั่ง (INSERT, DELETE, UPDATE) ที่สั่งไปทำกับข้อมูลที่ระบบฐานข้อมูล มีจำนวนรายการ(record) ของข้อมูล กี่รายการที่มีผลกับคำสั่งนั้น รูปแบบของคำสั่ง int mysql_affected_rows(int link_identifier) ; - link_identifier
ตัวอย่าง <? $link = mysql_connect(“localhost”,”seree”,”phpseree”); mysql_select_db(“test_db”,$link); $query = “update phpuser set old = 18 where id < 3”; $result = mysql_query($query,$link); $affect_rows = mysql_affected_rows($link); echo”จำนวนรายการที่ถูกทำด้วยคำสั่ง UPDATE : $affect_rows”; mysql_close($link); ?>
mysql_data_seek • เป็นฟังก์ชันที่ใช้เลื่อนตัวชี้(pointer) ไปยังแถวของรายการข้อมูลที่ต้องการ รูปแบบของคำสั่ง int mysql_data_seek(int result_identifier, int row_number); - result_identifier คือเลขที่อ้างถึงผลลัพธ์ที่ได้จากคำสั่ง SELECT - row_number
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ MySQL $link = mysql_connect(“localhost”,”root”,””); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db(“CarDB”,$link); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query ="select id, name,surname from member"; // ส่งคำสั่งไปทำงานที่ฐานข้อมูล $result = mysql_query($query,$link); //เลื่อน pointer ไปยังแถวที่ 3 $chk = mysql_data_seek($result,2);
ตัวอย่าง(ต่อ) if ($chk) { //อ่านข้อมูลของแถวที่ 3 $data = mysql_fetch_row($result); echo “รหัส $data[0] ของ $data[1] $data[2]”; } else { echo “ไม่สามารถอ่านข้อมูลแถวที่ 3 ได้”; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_db_query • ใช้ส่งคำสั่งไปยัง MySQL เหมือนกับฟังก์ชัน mysql_query() แต่สามารถกำหนดฐานข้อมูลที่ต้องการจะติดต่อได้ รูปแบบคำสั่ง int mysql_db_query(string databasename, string query, int link_identifier); - databasename ชื่อฐานข้อมูล - query คำสั่ง SQL - link_identifier ตัวแปรที่ใช้ติดต่อระบบฐานข้อมูลของ MySQL
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ MySQL $link = mysql_connect(“localhost”,”seree”,”phpseree”); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query = “select id,name,surname from phpuser”; //ส่งคำสั่งไปทำงานที่ฐานข้อมูล test_db ของ MySQL //ไม่ต้องใช้ฟังก์ชัน mysql_select_db() $result = mysql_db_query(“test_db”,$query,$link);
ตัวอย่าง(ต่อ) //เลื่อน pointer ไปยังแถวที่ 3 $chk = mysql_data_seek($result,2); if($chk) { //อ่านข้อมูลของแถวที่ 3 $data = mysql_fetch_row($result); echo “รหัส $data[0] ของ $data[1] $data[2]”; } else { echo “ไม่สามารถอ่านข้อมูลแถวที่ 3 ได้”; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_drop_db • เป็นฟังก์ชันที่ใช้ลบ(drop) ฐานข้อมูลออกจากระบบฐานข้อมูลของ MySQL รูปแบบของคำสั่ง int mysql_drop_db(string databasename, int link_identifier); - databasename ชื่อฐานข้อมูล - link_identifier ตัวแปรที่ใช้ติดต่อระบบฐานข้อมูลของ MySQL
mysql_errno • เป็นฟังก์ชันที่ใช้ในการรับค่าเลขรหัสของความผิดพลาด(error number)ที่เกิดขึ้นครั้งสุดท้ายเมื่อมีการติดต่อกับ MySQL รูปแบบของคำสั่ง int mysql_errno(int link_identifier);
mysql_error • เป็นฟังก์ชันที่ใช้ในการรับข้อความรายละเอียดของความผิดพลาด(error description)ที่เกิดขึ้นครั้งสุดท้ายเมื่อมีการติดต่อกับ MySQL รูปแบบของคำสั่ง string mysql_error(int link_identifier);
mysql_fetch_array • ใช้อ่านค่าของข้อมูลจากการใช้คำสั่ง SELECT ของฟังก์ชัน mysql_query หรือ mysql_db_query ให้อยู่ในรูปของตัวแปรอาร์เรย์ • mysql_fetch_array สามารถกำหนดดัชนีได้ทั้งแบบ ซื่อคอลัมน์ และเลขลำดับของคอลัมน์ รูปแบบของคำสั่ง array mysql_fetch_array (int result);
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ MySQL $link = mysql_connect(“localhost”,”root”,””); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db(“test_db”,$link); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query = select id,name,surname from phpuser”; //ส่งคำสั่งไปทำงานที่ระบบฐานข้อมูลของ MySQL $result = mysql_query($query,$link); //อ่านข้อมูลที่เก็บอยู่ในอาร์เรย์ $result ทีละแถว echo “อ่านค่าจากอาร์เรย์ โดยกำหนดดัชนีแบบซื่อของคอลัมน์<br>”; while ( $data = mysql_fetch_array($result){ //ฟังชันก์ mysql_fetch_row() ไม่สามารถทำได้ echo $data[“id”].” “.$data[“name”].” “.$data[“surname”].”<br>”; }
//ไปเริ่มอ่านที่แถวแรกใหม่//ไปเริ่มอ่านที่แถวแรกใหม่ mysql_data_seek($result,0); echo “อ่านค่าจากอาร์เรย์ โดยกำหนดดัชนีแบบเลขลำดับ<br>”; while ( $data = mysql_fetch_array($result) ){ echo $data[0].” “.$data[1].” “.$data[2].”<br>”; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_fetch_field • เป็นฟังก์ชันที่ใช้อ่านรายละเอียดของคอลัมน์ซึ่งจะเก็บอยู่ในรูปของออปเจค(object) รูปแบบของคำสั่ง array mysql_fetch_field (int result,[int field]);
mysql_fetch_lengths • ใช้อ่านค่าขนาดหรือความยาวของข้อมูลที่เก็บอยู่ของแต่ละคอลัมน์นั้นโดยค่าที่อ่านจะเก็บไว้ในรูปแบบของตัวแปรอาร์เรย์ การใช้ฟังก์ชันนี้ต้องใช้หลังจากเรียกใช้ฟังก์ชัน mysql_fetch_row,mysql_fetch_array,mysql_fetch_object แล้ว รูปแบบคำสั่ง array mysql_fetch_lengths($result);
ตัวอย่าง <? $link = mysql_connect(“localhost”,”seree”,”phpseree”); mysql_select_db(“test_db”,$link); $query = “select * form phpuser”; $result = mysql_query($query,$link); $getdata = mysql_fetch_row($result); $arrmax = mysql_fetch_lengths($result); for ($index = 0;$index < count($arrmax);$index++){ echo”คอลัมน์ $index มีขนาดสูงสุด ”.$arrmax[$index].”<br>”;} mysql_close($link); ?>
mysql_fetch_object • ทำงานเหมือนกับฟังก์ชัน mysql_fetch_array() และ mysql_fetch_row() แต่แตกต่างกันที่ค่าคืนกลับมานั้นเป็นออบเจค (object) แทนที่จะเป็นอาร์เรย์เหมือนกับฟังก์ชันทั้งสอง รูปแบบของคำสั่ง object mysql_fetch_object(int result);
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ Mysql $link = mysql_connect("localhost","seree",""); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db("test_db",$link); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query = "select * from phpuser"; //ส่งคำสั่งไปทำงานที่ระบบฐานข้อมูลของ Mysql $result = mysql_query($query,$link); //อ่านข้อมูลมาเก็บไว้ที่ object while ($object =mysql_fetch_object($result)){ echo $object ->id." "; echo $object ->name." "; echo $object ->surname."<BR> "; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_fetch_row • ทำงานเหมือนกับฟังก์ชัน mysql_fetch_array() แต่ดัชนีที่ใช้กำหนดข้อมูลในอาร์เรย์นั้นต้องเป็นเลขลำดับของคอลัมน์เท่านั้นไม่สามารถใช้ดัชนีเป็นชื่อของคอลัมน์ได้เหมือนกับฟังก์ชัน mysql_fetch_array() รูปแบบของคำสั่ง array mysql_fetch_row(int result);
mysql_filed_name • เป็นฟังก์ชันที่ใช้อ่านชื่อคอลัมน์ รูปแบบของคำสั่ง String mysql_field_name(int result , int field);
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ Mysql $link = mysql_connect(“localhost”,”seree”,”phpseree”); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db(“test_db”,$link); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query = “select * form phpuser”; //ส่งคำสั่งไปทำงานที่ระบบฐานข้อมูลของ Mysql $result = mysql_query($query,$link); //หาจำนวนของคอลัมน์ $numfield = mysql_num_fields($result); //แสดงชื่อของคอลัมน์
ตัวอย่าง(ต่อ) for(){ echo “คอลัมน์ $index ชื่อ ”.mysql_field_name($result,$index),”<br>”; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_field_seek • เป็นฟังก์ชันที่ใช้เลื่อนตัวชี้ (pointer) ของคอลัมน์ให้ไปยังคอลัมน์ที่ต้องการ รูปแบบของคำสั่ง Int mysql_field_seek(int result,int field);
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ Mysql $link = mysql_connect(“localhost”,”seree”,”phpseree”); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db(“test_db”,$link); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query = “select * form phpuser”; //ส่งคำสั่งไปทำงานที่ระบบฐานข้อมูลของ Mysql $result = mysql_query($query,$link); //หาจำนวนของคอลัมน์ $numfield = mysql_num_fields($result);
ตัวอย่าง(ต่อ) //คอลัมน์แรก $data = mysql_fetch_field($result); echo “คอลัมน์แรก “.$data->table.” “.$data->name””.$data->type; echo”<br>”; //เลื่อน pointer คอลัมน์ที่ ข้ามคอลัมน์ที่ 2 mysql_field_seek($result,3); //คอลัมน์ที่สี่ $data = mysql_fetch_field($result); echo “คอลัมน์ที่สี่ “.$data->table.” ”.$data->name.””.$data->type; //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_field_table • เป็นฟังก์ชันที่ใช้อ่านชื่อตาราง (table)ของคอลัมน์นั้น รูปแบบของคำสั่ง string mysql_field_table(int result,int field);
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ Mysql $link = mysql_connect(“localhost”,”seree”,”phpseree”); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db(“test_db”,$link); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query = “select phpuser.name , phpalias.alias , phpuser.surname from phpuser , phpalias where phpuser.id = phpalias.id”;
ตัวอย่าง(ต่อ) //ส่งคำสั่งไปทำงานที่ระบบฐานข้อมูลของ Mysql $result = mysql_query($query,$link); //หาจำนวนของคอลัมน์ $numfield = mysql_num_fields($result); //แสดงชื่อตาราง (table) ของคอลัมน์ for ($index = 0 ; $index < $sumfield ; $index++){ echo “คอลัมน์ “.mysql_field_name($result,$index).”มาจากตาราง “; echo mysql_field_table($result,$index).”<br>”; //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_field_type • เป็นฟังก์ชันที่ใช้อ่านข้อมูลประเภทของคอลัมน์ รูปแบบของคำสั่ง string mysql_field_type(int result,int field);
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ Mysql $link = mysql_connect(“localhost”,”seree”,”phpseree”); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db(“test_db”,$link); //กำหนดคำสั่งที่ต้องส่งไปทำงานที่ฐานข้อมูล $query = “select phpuser.name , phpalias.alias , phpuser.surname from phpuser , phpalias where phpuser.id = phpalias.id”; //ส่งคำสั่งไปทำงานที่ระบบฐานข้อมูลของ Mysql $result = mysql_query($query,$link); //หาจำนวนของคอลัมน์ $numfield = mysql_num_fields($result);
ตัวอย่าง(ต่อ) //แสดงประเภทของคอลัมน์ for ($index = 0 ; $index < $sumfield ; $index++){ echo “คอลัมน์ “.mysql_field_name($result,$index). ”มาจากตาราง “; echo mysql_field_table($result,$index); echo “ประเภทของคอลัมน์” .mysql_field_type($result,$index).”<br>”; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>
mysql_field_flags • เป็นฟังก์ชันที่ใช้อ่านรายละเอียดเฉพาะที่กำหนดให้กับคอลัมน์นั้น เช่น not_null , primary_key , unique_key , multiple_key , blob , unsigned , binary , enum , auto_increment , timesstamp รูปแบบของคำสั่ง string mysql_field_flags (int result,int field);
ตัวอย่าง <? //ติดต่อระบบฐานข้อมูลของ Mysql $link = mysql_connect(“localhost”,”seree”,”phpseree”); //เลือกฐานข้อมูลที่ต้องการ mysql_select_db(“test_db”,$link); //ส่งคำสั่งไปทำงานที่ระบบฐานข้อมูลของ Mysql $result = mysql_query($query,$link); //หาจำนวนของคอลัมน์ $numfield = mysql_num_fields($result);
ตัวอย่าง(ต่อ) //แสดงรายละเอียดเฉพาะของแต่ละคอลัมน์ที่กำหนดให้ for ($index = 0 ; $index < $sumfield ; $index++){ echo “คอลัมน์ :“.mysql_field_name($result,$index);” echo “รายละเอียดเฉพาะที่กำหนดให้:”.eregi_replace(“ “,”,”, mysql_field_flags($result,$index).”<br>”; } //ยกเลิกการติดต่อกับระบบฐานข้อมูล mysql_close($link); ?>