CHAPTER 14 Database Management
Agenda การเขียนโปรแกรมติดต่อฐานข้อมูล การสร้างตาราง การเลือกข้อมูลจากตาราง การเพิ่มข้อมูลลงในตาราง การลบข้อมูลในตาราง การแก้ไขข้อมูลในตาราง
กำหนดฐานข้อมูลที่จะใช้งาน เขียนคำสั่ง SQL run คำสั่ง SQL การเขียนโปรแกรมติดต่อฐานข้อมูล MySQL โดยใช้ PHP ขั้นตอน ติดต่อฐานข้อมูล กำหนดฐานข้อมูลที่จะใช้งาน เขียนคำสั่ง SQL run คำสั่ง SQL ปิดการติดต่อฐานข้อมูล
1. การติดต่อกับฐานข้อมูล สร้างส่วนเชื่อมต่อกับฐานข้อมูลด้วยคำสั่ง mysql_connect ดังนี้ mysql_connect(hostname, username, password) ; hostname คือ เครื่องที่ติดตั้งระบบฐานข้อมูลของ MySQL username คือ ชื่อของผู้ใช้ที่มีสิทธิ์เข้าใช้ระบบฐานข้อมูลของ MySQL password คือ รหัสผ่านของ username
ตัวอย่างการติดต่อกับฐานข้อมูล $hostname = "localhost"; $username = ”root”; $password = ”root"; mysql_connect($hostname, $username, $password) or die("Unable to connect database"); ถ้าติดต่อฐานข้อมูลไม่ได้จะแสดงข้อความว่า “Unable to connect database)
2. การกำหนดฐานข้อมูล ใช้ฟังก์ชัน mysql_select_db ตามรูปแบบดังนี้ mysql_select_db(databasename); ตัวอย่าง $databaseName = "Registration"; mysql_select_db( "$databaseName") or die( "Unable to select database");
3. การเขียนคำสั่ง SQL สร้างคำสั่ง SQL เก็บไว้ในตัวแปร ตัวอย่าง $tablename = "Student"; $query = "select * from $tablename "; ตัวอย่างจะเก็บคำสั่ง SQL ไว้ที่ตัวแปร $query
4. การ run คำสั่ง SQL การ run คำสั่ง SQL เพื่อนำข้อมูลมาแสดงผลใช้ฟังก์ชัน mysql_query โดยมีรูปแบบคำสั่งดังนี้ mysql_query($query); $query คือตัวแปรที่เก็บคำสั่ง SQL ที่ใช้ ตัวอย่าง $tbname = "Answer"; $query = "select * from $tablename"; $result=mysql_query($query); จากตัวอย่าง ผลลัพธ์ของการ run คำสั่ง SQL ของ $query จะถูกเก็บไว้ที่ $result
5. การปิดการติดต่อฐานข้อมูล การปิดการติดต่อฐานข้อมูลใช้ฟังก์ชัน mysql_close();
ฟังก์ชันอื่น ๆ - การรับค่าผลลัพธ์จากการ run ของคำสั่ง SQL ใช้ฟังก์ชัน mysql_fetch_array($result); $result คือตัวแปรที่เก็บผลการ run ของคำสั่ง SQL ตัวอย่าง เช่น $row=mysql_fetch_array($result)); - การรับค่าจำนวนแถว ใช้ฟังก์ชัน mysql_num_rows($result); - การรับค่าจำนวนฟิลด์ ใช้ฟังก์ชัน mysql_num_fields($result);
การสร้างตาราง ตัวอย่าง จะสร้างตารางชื่อ employee ลงในฐานข้อมูล company โดยมีฟิลด์ดังนี้ Name Type Length Description id INT 6 A unique identifier for each record first VARCHAR 15 The person's first name last The person's last name phone 20 The person's phone number email 30 The person's e-mail address web The person's website
create_table.php <? $hostname="localhost"; $username="root"; $password="root"; $database=“company"; mysql_connect($hostname,$username,$password) or die( "Unable to connect database"); mysql_select_db($database) or die( "Unable to select database"); $query="CREATE TABLE employee (id int(6) NOT NULL auto_increment, first varchar(15) NOT NULL, last varchar(15) NOT NULL, phone varchar(20) NOT NULL, email varchar(30) NOT NULL, web varchar(30) NOT NULL, PRIMARY KEY (id))"; mysql_query($query); mysql_close(); echo "สร้างตาราง employee เรียบร้อยแล้ว"; ?> create_table.php
การสร้างฟอร์มรับข้อมูลเพื่อนำไปเพิ่มในตาราง ตัวอย่าง จะสร้างฟอร์ม insert.html เพื่อนำข้อมูลไปเพิ่มลงในตาราง employee <html> <body> <form action="insert.php" method="post"> First Name: <input type="text" name="first"><br> Last Name: <input type="text" name="last"><br> Phone: <input type="text" name="phone"><br> E-mail: <input type="text" name="email"><br> Web: <input type="text" name="web"><br> <input type= " submit" value="Add"> <input type="reset" value="Reset"> </form> </body> </html> insert.html
การนำข้อมูลจากฟอร์มมาเพิ่มลงในตาราง <? $hostname="localhost"; $username="root"; $password="root"; $database="company"; $first=$_POST['first']; $last=$_POST['last']; $phone=$_POST['phone']; $email=$_POST['email']; $web=$_POST['web']; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query = "INSERT INTO employee VALUES ('','$first','$last','$phone','$email','$web')"; mysql_query($query); mysql_close(); echo "เพิ่มข้อมูลเรียบร้อยแล้ว"; ?> insert.php
insert.html insert.php
การนำข้อมูลจากตารางมาแสดง <? $hostname="localhost"; $username="root"; $password="root"; $database="company"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="SELECT * FROM employee"; $result=mysql_query($query); echo "<b><center>Database Output</center></b><br><br>"; while ($row=mysql_fetch_array($result)) { $first=$row[first]; $last=$row[last]; $phone= $row[phone]; $email=$row[email]; $web= $row[web]; echo "<b>$first $last</b><br>"; echo "Phone: $phone<br>"; echo "E-mail: $email<br>"; echo "Web: $web<br>"; echo "<hr><br>"; } mysql_close(); ?> select.php
select.php
การนำข้อมูลจากตารางมาแสดงลงในตารางของ html เพื่อทำ link ไปยังการแก้ไข(update) และลบ (delete) เรคอร์ด <html> <body> <? $hostname="localhost"; $username="root"; $password="root"; $database="company"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="SELECT * FROM employee"; $result=mysql_query($query); ?> <table border="1" cellspacing="2" cellpadding="2"> <tr> <th>Name</th> <th>Phone</th> <th>E-mail</th> <th>Website</th> <th colspan=2>Modify</th> </tr> select2.php
select2.php (ต่อ) <? while ($row=mysql_fetch_array($result)) { $id=$row[id]; $first=$row[first]; $last=$row[last]; $phone= $row[phone]; $email=$row[email]; $web= $row[web]; ?> <tr> <td><? echo $first." ".$last; ?></td> <td><? echo $phone;?></td> <td><a href="mailto:<? echo $email; ?>">E-mail</a></td> <td><a href="<? echo $web; ?>">Website</a></td> <td><a href="update.php?id=<?echo $id?>">Update</a></td> <td><a href="delete.php?id=<?echo $id?>">Delete</a></td> </tr> } mysql_close(); </table> </body> </html> select2.php (ต่อ)
select2.php
เมื่อมีการคลิกลิงค์ delete จากไฟล์ select2.php การลบข้อมูลจากตาราง เมื่อมีการคลิกลิงค์ delete จากไฟล์ select2.php <? $hostname="localhost"; $username="root"; $password="root"; $database="company"; $id=$_GET['id']; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="DELETE FROM employee WHERE id=$id "; mysql_query($query); echo "ลบเรคอร์ดเรียบร้อยแล้ว" ?> delete.php
delete.php หน้าจอ select2.php ภายหลังการ delete เรคอร์ดของ Seya Duna
เมื่อมีการคลิกลิงค์ update จากไฟล์ select2.php การแก้ไขข้อมูล เมื่อมีการคลิกลิงค์ update จากไฟล์ select2.php ขั้นตอน นำข้อมูลของเรคอร์ดที่ถูกเลือกว่าจะ update ออกจากฐานข้อมูลมาแสดงในฟอร์มเพื่อให้ user ทำการแก้ไขข้อมูล นำข้อมูลที่แก้ไขแล้วจากฟอร์มไป update กับข้อมูลในฐานข้อมูล
ขั้นตอนที่ 1: นำข้อมูลออกจากฐานข้อมูลมาแสดงในฟอร์มเพื่อ ทำการแก้ไข <html> <body> <? $id=$_GET['id']; $hostname="localhost"; $username="root"; $password="root"; $database="company"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="SELECT * FROM employee WHERE id=$id"; $result=mysql_query($query); update.php
update.php (ต่อ) while ($row=mysql_fetch_array($result)) { $first=$row[first]; $last=$row[last]; $phone= $row[phone]; $email=$row[email]; $web= $row[web]; ?> update.php (ต่อ)
update.php (ต่อ) <form action="update_record.php" method="post"> <input type="hidden" name="ud_id" value="<? echo $id; ?>"> First Name: <input type="text" name="ud_first" value="<? echo $first; ?>"><br> Last Name: <input type="text" name="ud_last" value="<? echo $last; ?>"><br> Phone Number: <input type="text" name="ud_phone" value=" <? echo $phone; ?>"><br> E-mail Address: <input type="text" name="ud_email" value=“ <? echo $email; ?>"><br> Web Address: <input type="text" name="ud_web" value=“ <? echo $web; ?>"><br> <input type="Submit" value="Update"> </form> <? } mysql_close(); ?> </body> </html> update.php (ต่อ)
หน้าจอ update.php เมื่อมีการคลิกลิงค์ update ของ Dan Wilma จากหน้าจอ select2.php จะดึงข้อมูลเดิมของ Dan Wilma ออกมาเพื่อให้ทำการแก้ไข
ขั้นตอนที่ 2: นำข้อมูลที่แก้ไขแล้วจาก update ขั้นตอนที่ 2: นำข้อมูลที่แก้ไขแล้วจาก update.php มา update ลงในฐานข้อมูล ผ่านการทำงานของไฟล์ update_record.php <? $ud_id=$_POST['ud_id']; $ud_first=$_POST['ud_first']; $ud_last=$_POST['ud_last']; $ud_phone=$_POST['ud_phone']; $ud_email=$_POST['ud_email']; $ud_web=$_POST['ud_web']; $hostname="localhost"; $username="root"; $password="root"; $database="company"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="UPDATE employee SET first='$ud_first', last='$ud_last', phone='$ud_phone', email='$ud_email', web='$ud_web' WHERE id=$ud_id"; mysql_query($query); mysql_close(); echo "แก้ไขข้อมูลเรียบร้อยแล้ว"; ?> update_record.php
แก้ไขข้อมูลจากหน้าจอ update.php หน้าจอ update_record.php
หน้าจอ select2.php ภายหลังการ update เรคอร์ดของ Dan Wilma ซึ่งเปลี่ยนชื่อเป็น Dana
การจัดการกับข้อมูลหลายตาราง การทำงานกับตารางข้อมูลหลายตาราง ให้คำนึงถึงความสัมพันธ์ (Relationships) ระหว่างตาราง การจัดการกับข้อมูลหลายตารางจะใช้ SQL ช่วย โดยจะมีส่วนของการเชื่อมความสัมพันธ์ระหว่างตาราง ผ่านฟิลด์ที่ทำหน้าที่เป็น Foreign key
ตัวอย่าง ระบบการลงทะเบียน มีตารางข้อมูลที่เกี่ยวข้องดังต่อไปนี้ ตารางนักเรียน (student) ตารางอาจารย์ (advisor) ตารางวิชา (subject) ตารางการลงทะเบียนเรียน (register)
Relational Database Model student(stucode, stuname, address,advcode ) advisor(advcode, adv_name, phone) subject(subcode, subname, credit) register(stucode, subode, score, grade) Relationships
ข้อมูลในแต่ละตาราง
ข้อมูลในแต่ละตาราง
ตัวอย่าง SQL สำหรับการเลือกข้อมูลจากตาราง แสดงรายชื่อนักเรียนกับอาจารย์ที่ปรึกษา SELECT student.stuname, advisor.advname FROM advisor INNER JOIN student ON advisor.advcode = student.advcode 2. แสดงรายชื่อนักเรียน วิชาที่ลงทะเบียน และคะแนนที่ได้ SELECT student.stuname, subject.subname, register.score FROM subject INNER JOIN (student INNER JOIN register ON student.stucode = register.stucode) ON subject.subcode = register.subcode
ตัวอย่าง SQL สำหรับการเลือกข้อมูลจากตาราง 3. แสดงรายชื่อวิชา และคะแนนเฉลี่ยของแต่ละกระบวนวิชา SELECT subject.subname, Avg(register.score) AS AvgOfscore FROM subject INNER JOIN register ON subject.subcode = register.subcode GROUP BY subject.subname
ตัวอย่าง SQL สำหรับการเลือกข้อมูลจากตาราง 4. แสดงรายชื่อวิชาที่มีนักเรียนลงทะเบียน และชื่อนักเรียนที่ลงทะเบียนในวิชานั้น ๆ พร้อมทั้งเกรดที่ได้รับ จะใช้การทำ query 2 ครั้ง โดย ครั้งที่ 1 : เชื่อมความสัมพันธ์ระหว่างตาราง register และ subject ด้วยฟิลด์ subcode จากนั้นดึงฟิลด์ subcode ออกจากตาราง register และดึงฟิลด์ subname ออกมาจากตาราง subject โดยไม่ให้ subcode และ subname ซ้ำกัน SELECT register.subcode, subject.subname FROM subject INNER JOIN register ON subject.subcode = register.subcode GROUP BY register.subcode
ตัวอย่าง SQL สำหรับการเลือกข้อมูลจากตาราง ครั้งที่ 2 : เชื่อมความสัมพันธ์ระหว่างตาราง register กับ student ด้วยฟิลด์ stucode จากนั้นดึงฟิลด์ stuname ออกจากตาราง student และฟิลด์ grade ออกจากตาราง register ด้วยเงื่อนไข register.stucode = stucode ที่ดึงออกมาได้จาก query ครั้งที่ 1 SELECT student.stuname, register.grade, register.subcode FROM student INNER JOIN register ON student.stucode = register.stucode WHERE (((register.subcode)=“$subcode"));
แสดงรายชื่อนักเรียนกับอาจารย์ที่ปรึกษา ตัวอย่าง Source Code แสดงรายชื่อนักเรียนกับอาจารย์ที่ปรึกษา <html> <body> <? $hostname="localhost"; $username="root"; $password="root"; $database="myschool"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="SELECT student.stuname, advisor.advname FROM advisor INNER JOIN student ON advisor.advcode = student.advcode"; $result=mysql_query($query); ?> select3.php
<table border="1" cellspacing="2" cellpadding="2"> <tr> <th>Student Name</th> <th>Advisor Name</th> </tr> <? while ($row=mysql_fetch_array($result)) { $stuname=$row[stuname]; $advname=$row[advname]; ?> <td><? echo $stuname; ?></td> <td><? echo $advname;?></td> } mysql_close(); </table> </body> </html> select3.php (ต่อ)
2. แสดงรายชื่อนักเรียน วิชาที่ลงทะเบียน และคะแนนที่ได้ 2. แสดงรายชื่อนักเรียน วิชาที่ลงทะเบียน และคะแนนที่ได้ <html> <body> <? $hostname="localhost"; $username="root"; $password="root"; $database="myschool"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="SELECT student.stuname, subject.subname, register.score FROM subject INNER JOIN (student INNER JOIN register ON student.stucode = register.stucode) ON subject.subcode = register.subcode"; $result=mysql_query($query); ?> select4.php
<table border="1" cellspacing="2" cellpadding="2"> <tr> <th>Student Name</th> <th>Subject Name</th> <th>Score</th> </tr> <? while ($row=mysql_fetch_array($result)) { $stuname=$row[stuname]; $subname=$row[subname]; $score=$row[score]; ?> <td><? echo $stuname; ?></td> <td><? echo $subname;?></td> <td><? echo $score;?></td> } mysql_close(); </table> </body> </html> select4.php (ต่อ)
3. แสดงรายชื่อวิชา และคะแนนเฉลี่ยของแต่ละกระบวนวิชา <html> <body> <? $hostname="localhost"; $username="root"; $password="root"; $database="myschool"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query="SELECT subject.subname, Avg(register.score) AS avgscore FROM subject INNER JOIN register ON subject.subcode = register.subcode GROUP BY subject.subname"; $result=mysql_query($query); ?> select5.php
<table border="1" cellspacing="2" cellpadding="2"> <tr> <th>Subject Name</th> <th>Average Score</th> </tr> <? while ($row=mysql_fetch_array($result)) { $subname=$row[subname]; $avgscore=$row[avgscore]; ?> <td><? echo $subname;?></td> <td><? printf("%.2f",$avgscore);?></td> } mysql_close(); </table> </body> </html> select5.php (ต่อ)
4. แสดงรายชื่อวิชาที่มีนักเรียนลงทะเบียน และชื่อนักเรียนที่ลงทะเบียนในวิชานั้น ๆ พร้อมทั้งเกรดที่ได้รับ <? $hostname="localhost"; $username="root"; $password="root"; $database="myschool"; mysql_connect($hostname,$username,$password) or die("Unable to connect database"); mysql_select_db($database) or die("Unable to select database"); $query1="SELECT register.subcode, subject.subname FROM subject INNER JOIN register ON subject.subcode = register.subcode GROUP BY register.subcode"; $result1=mysql_query($query1); ?> select6.php
<? while ($row1=mysql_fetch_array($result1)) // loop while 1 { $subcode=$row1[subcode]; $subname=$row1[subname]; $query2="SELECT student.stuname, register.grade FROM student INNER JOIN register ON student.stucode = register.stucode WHERE (((register.subcode)='$subcode'))"; $result2=mysql_query($query2); echo "<b>$subname</b>"; ?> <table border="1" cellspacing="2" cellpadding="2"> <tr> <th>Student Name</th> <th>Grade</th> </tr> select6.php (ต่อ)
<? while ($row2=mysql_fetch_array($result2)) // loop while 2 { $stuname=$row2[stuname]; $grade=$row2[grade]; ?> <tr> <td><? echo $stuname;?></td> <td><? echo $grade;?></td> </tr> } //loop while 2 </table> <br><br> } // loop while 1 mysql_close(); </body> </html> select6.php (ต่อ)
select6.php