PHP with MySQL
เนื้อหา ขั้นตอนในการเรียกใช้ฐานข้อมูลจากเว็บ ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฐานข้อมูล
ขั้นตอนในการเรียกใช้ฐานข้อมูลจากเว็บ การเชื่อมต่อกับฐานข้อมูล การเรียกใช้ฐานข้อมูลผ่านเว็บ การใช้ภาษา SQL กับฐานข้อมูล MySQL การยกเลิกการเชื่อมต่อกับฐานข้อมูล
ขั้นตอนในการเรียกใช้ฐานข้อมูลจากเว็บ ในการเขียน PHP เพื่อเรียกใช้ฐานข้อมูลมีขั้นตอนต่างๆ ดังต่อไปนี้ การเชื่อมต่อกับฐานข้อมูล การเรียกใช้ฐานข้อมูลผ่านเว็บ การใช้ภาษา SQL กับฐานข้อมูล MySQL การยกเลิกการเชื่อมต่อกับฐานข้อมูล
การเชื่อมต่อกับฐานข้อมูล การเชื่อมต่อกับฐานข้อมูล MySQL ในภาษา PHP สามารถใช้ 2 ฟังก์ชัน ต่อไปนี้ คือ mysql_connect() mysql_pconnect()
mysql_connect() รูปแบบ int mysql_connection(localhost, username, password) localhost ชื่อ database server หรือ IP Address ของ database server username ชื่อผู้ใช้ฐานข้อมูล password รหัสผ่าน ทำการเชื่อมต่อฐานข้อมูลโดยต้องระบุ database server, ชื่อผู้ใช้ และรหัสผู้ใช้ เมื่อใช้งานเสร็จต้อง ต้องยกเลิกการเชื่อมต่อด้วยฟังก์ชัน mysql_close()
mysql_pconnect() รูปแบบ int mysql_pconnection(localhost, username, password) localhost ชื่อ database server หรือ IP Address ของ database server username ชื่อผู้ใช้ฐานข้อมูล password รหัสผ่าน ทำการเชื่อมต่อฐานข้อมูลโดยต้องระบุ database server, ชื่อผู้ใช้ และรหัสผู้ใช้ เมื่อใช้งานเสร็จต้อง จะยกเลิกการเชื่อมต่อโดยอัตโนมัติ
connect_inc.php หมายเหตุ : <?php // connect_inc.php define("DB_SERVER", "localhost"); // database server define("USERNAME", "root"); // username define("PASSWORD", ""); // no password define("CURRENT_DB", “ict"); // current database $db = mysql_pconnect( DB_SERVER, USERNAME, PASSWORD); ?> หมายเหตุ : define("CURRENT_DB", “ict"); จะขึ้นอยู่กับว่านิสิตตั้งชื่อ หรือ กำหนดให้ใช้งานฐานข้อมูลตัวใด ในที่นี้ สมมติให้ใช้ฐานข้อมูลชื่อ ict
การเรียกใช้ฐานข้อมูลผ่านเว็บ รูปแบบ int mysql_select_db(string dbname) dbname ชื่อของฐานข้อมูลโดยเราต้องใช้คำสั่ง mysql_connect() ก่อนถึงจะสามารถใช้คำสั่งนี้ได้ ทำการเรียกใช้งานฐานข้อมูลผ่านเว็บ โดยเราต้องกำหนดชื่อของฐานข้อมูลที่ต้องการเป็น argument ที่ส่งไป
การใช้ภาษา SQL มาใช้กับฐานข้อมูล MySQL รูปแบบ int mysql_query(string query, [int db_connect]) query คิวรีที่เรียกใช้ฐานข้อมูล db_connect ตัวแปรที่ใช้เชื่อมต่อกับฐานข้อมูลที่ได้จาก mysql_connect() เรียกใช้งาน SQL ที่เราต้องการ แต่ต้องใช้ร่วมกับ mysql_select_db()
การใช้ภาษา SQL มาใช้กับฐานข้อมูล MySQL รูปแบบ int mysql_db_query(string dbname, string query, [int db_connect]) dbname ชื่อของฐานข้อมูล query คิวรีที่เรียกใช้ฐานข้อมูล db_connect ตัวแปรที่ใช้เชื่อมต่อกับฐานข้อมูลที่ได้จาก mysql_connect() เรียกใช้งาน SQL ที่เราต้องการ โดยไม่ต้องใช้ร่วมกับ mysql_select_db()
mysql_db_query() เมื่อเราต้องการประมวลผล คำสั่ง SQL ที่เตรียมเอาไว้ require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM login WHERE USERNAME='" . $username . "' AND PASSWORD='" . $password . "'"; $login_result = mysql_db_query(CURRENT_DB, $sql_login); $login_rows = mysql_fetch_array($login_result); $user = $login_rows["USERNAME"]; เมื่อเราต้องการประมวลผล คำสั่ง SQL ที่เตรียมเอาไว้
การยกเลิกการเชื่อมต่อกับฐานข้อมูล รูปแบบ int mysql_close(db_connect) db_connect ตัวแปรที่เก็บการเชื่อมต่อฐานข้อมูลด้วยคำสั่ง mysql_connect() ไว้ ทำการยกเลิกการเชื่อมต่อกับฐานข้อมูลที่เราเชื่อมต่อผ่านคำสั่ง mysql_connect()
ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฐานข้อมูล คำอธิบาย mysql_free_result() ใช้สำหรับคืนหน่วยความจำให้ระบบ mysql_create_db() ใช้สำหรับสร้างฐานข้อมูล mysql_drop_db() ใช้สำหรับลบฐานข้อมูล mysql_fetch_array() ใช้สำหรับดึงผลลัพธ์จากฐานข้อมูลไปเก็บไว้ในอาร์เรย์ mysql_fetch_row() ใช้สำหรับเลื่อนตำแหน่งของตัวชี้ข้อมูลไปยังเรคอร์ดถัดไป
ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฐานข้อมูล คำอธิบาย mysql_insert_id() ใช้สำหรับเรียกดู PK กรณีที่เรากำหนดเป็นauto_increment ภายหลังจากการเพิ่มข้อมูล mysql_num_rows() ใช้สำหรับนับจำนวนเรคอร์ด (SELECT) mysql_affected_rows() ใช้สำหรับนับจำนวนเรคอร์ดที่มีการเปลี่ยนแปลงล่าสุด (INSERT, UPDATE, DELETE)
ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฐานข้อมูล คำอธิบาย mysql_result() ใช้สำหรับแสดงผลลัพธ์ในฐานข้อมูล ตามแถว (record) และคอลัมน์(Field) ที่กำหนด mysql_fetch_object() ใช้สำหรับดึงค่าผลลัพธ์จากฐานข้อมูลไปไว้ใน object โดยที่เราจะสามารถระบุชื่อฟิลด์ได้เลย mysql_data_seek() ใช้สำหรับระบุตำแหน่งของเรคอร์ดที่ต้องการเริ่มต้น (เรคอร์ดแรก คือ 0 )
ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฐานข้อมูล คำอธิบาย mysql_list_dbs() ใช้สำหรับคืนค่าตัวชี้ (handle) ของฐานข้อมูล ใช้ร่วมกับ mysql_num_rows() เพื่อแสดงจำนวนฐานข้อมูลทั้งหมด หรือใช้ร่วมกับ mysql_tablename() เพื่อแสดงชื่อของฐานข้อมูลที่เรากำหนด
ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฐานข้อมูล คำอธิบาย mysql_list_tables() ใช้สำหรับคืนค่าตัวชี้ (handle) ของฐานข้อมูลที่เราระบุ โดยใช้ร่วมกับ mysql_list_dbs() เพื่อแสดงจำนวนตารางข้อมูลทั้งหมดในฐานข้อมูล หรือใช้ร่วมกับ mysql_tablename() เพื่อแสดงรายชื่อของตาราง
ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฐานข้อมูล คำอธิบาย mysql_list_fields() ใช้สำหรับคืนค่าตัวชี้ (handle) ที่จะนำไปหารายละเอียดเกี่ยวกับคอลัมน์ในตารางและฐานข้อมูลที่กำหนด mysql_tablename() ใช้แสดงชื่อของฐานข้อมูล หรือ ตารางที่เราระบุ
int mysql_free_result(int result) รูปแบบ int mysql_free_result(int result) result ตัวแปรที่เก็บผลลัพธ์จากการคิวรีข้อมูลจากฐานข้อมูล ใช้สำหรับคืนหน่วยความจำที่จัดเก็บผลลัพธ์ข้อมูลจากการคิวรีข้อมูลจากฐานข้อมูล
mysql_free_result() เมื่อเราเลิกใช้งาน result require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM login WHERE USERNAME='" . $username . "' AND PASSWORD='" . $password . "'"; $login_result = mysql_db_query(CURRENT_DB, $sql_login); $login_rows = mysql_fetch_array($login_result); $user = $login_rows["USERNAME"]; mysql_free_result($login_result); เมื่อเราเลิกใช้งาน result ที่ได้จาก mysql_db_query() หากต้องการคืนค่าให้กับหน่วยความจำ
int mysql_create_db(string dbname [, int db_connect]) รูปแบบ int mysql_create_db(string dbname [, int db_connect]) dbname ชื่อของฐานข้อมูลที่ต้องการสร้าง db_connect รายละเอียดของการเชื่อมต่อฐานข้อมูล ทำการสร้างฐานข้อมูล สำหรับ db_connect ที่เรากำหนด
mysql_create_db() เมื่อเราต้องการสร้างฐานข้อมูลชื่อ pyo require(“connect_inc.php”); . . . mysql_create_db(“pyo”, $db); เมื่อเราต้องการสร้างฐานข้อมูลชื่อ pyo
int mysql_drop_db(string dbname [, int db_connect]) รูปแบบ int mysql_drop_db(string dbname [, int db_connect]) dbname ชื่อของฐานข้อมูลที่ต้องการลบ db_connect รายละเอียดของการเชื่อมต่อฐานข้อมูล ทำการลบฐานข้อมูล สำหรับ db_connect ที่เรากำหนด
mysql_drop_db() เมื่อเราต้องการลบฐานข้อมูลชื่อ pyo require(“connect_inc.php”); . . . mysql_drop_db(“pyo”, $db); เมื่อเราต้องการลบฐานข้อมูลชื่อ pyo
array mysql_fetch_array(int result [, int result_type]) รูปแบบ array mysql_fetch_array(int result [, int result_type]) result ข้อมูลที่ได้มาจาก mysql_query() หรือ mysql_db_query() result_type กำหนดค่าที่จัดเก็บในอาร์เรย์ -associative key ให้กำหนดเป็น MYSQL_ASSOC -numeric key ให้กำหนดเป็น MYSQL_NUM ดึงค่าผลลัพธ์ที่ได้จากคำสั่ง mysql_query() หรือ mysql_db_query() เก็บลงอาร์เรย์เพื่อนำไปใช้งานต่อไป
mysql_fetch_array() เมื่อเราต้องการนำข้อมูล 1 เรคอร์ด require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM”; $login_result = mysql_db_query(CURRENT_DB, $sql_login); while($login_rows = mysql_fetch_array($login_result)){ echo “username =” . $login_rows["USERNAME"]; echo “password =” . $login_rows[“PASSWORD"]; . “<br/>; } เมื่อเราต้องการนำข้อมูล 1 เรคอร์ด ที่ได้จากตารางข้อมูล login มาจัดเก็บไว้ในอาร์เรย์ ชื่อ $login_rows หากต้องการอ่านข้อมูลทั้งหมด ต้องใช้ loop while เพื่ออ่านข้อมูล ที่มีให้หมด
array mysql_fetch_row(int result) รูปแบบ array mysql_fetch_row(int result) result ข้อมูลที่ได้มาจาก mysql_query() หรือ mysql_db_query() ใช้สำหรับเลื่อนตำแหน่งของตัวชี้ไปยังเรคอร์ดถัดไป (MoveNext)
mysql_fetch_array() เมื่อเราต้องการนำข้อมูล 1 เรคอร์ด require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM login”; $login_result = mysql_db_query(CURRENT_DB, $sql_login); while($login_rows = mysql_fetch_row($login_result)){ echo “username =” . $login_rows[0]; echo “password =” . $login_rows[1] . “<br/>; } เมื่อเราต้องการนำข้อมูล 1 เรคอร์ด ที่ได้จากตารางข้อมูล login มาจัดเก็บไว้ในอาร์เรย์ ชื่อ $login_rows หากต้องการอ่านข้อมูลทั้งหมด ต้องใช้ loop while เพื่ออ่านข้อมูล ที่มีให้หมด
int mysql_insert_id([ int db_connect ]) รูปแบบ int mysql_insert_id([ int db_connect ]) db_connect รายละเอียดของการเชื่อมต่อฐานข้อมูล ใช้เรียกแสดงค่า PK ล่าสุดของตารางที่เราทำการเพิ่มข้อมูล โดยฟิลด์ PK ต้องกำหนดเป็น auto_increment
mysql_insert_id () เราไม่จำเป็นต้องใส่ค่า author_id ในส่วนของ require(“connect_inc.php”); . . . $insert_author = “INSERT INTO AUTHOR (AUTHOR_NAME) VALUES(‘SOMCHAI DEEJAI’)”; $insert_result = mysql_db_query(CURRENT_DB, $insert_author); $author_id = mysql_insert_id(); echo “The last author_id is ” . $author_id; เราไม่จำเป็นต้องใส่ค่า author_id ในส่วนของ คำสั่ง insert เนื่องจากว่า author_id มีชนิดเป็น auto_increment หลังจากเพิ่มข้อมูลเสร็จเราสามารถตรวจสอบค่า author_id ได้จากคำสั่ง mysql_insert_id() ที่จะส่งค่ากลับเป็น ค่า auto_increment ล่าสุด ซึ่งก็คือ author_id นั้นเอง
int mysql_num_rows(int result) รูปแบบ int mysql_num_rows(int result) result ข้อมูลที่ได้มาจาก mysql_query() หรือ mysql_db_query() ใช้สำหรับนับจำนวนเรคอร์ดที่เรา SELECTจากการใช้คำสั่ง mysql_query() หรือ mysql_db_query()
mysql_num_rows() ระบบจะทำการนับและส่งกลับ require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM login”; $login_result = mysql_db_query(CURRENT_DB, $sql_login); $rows = mysql_num_rows($login_result); echo “You have ” . $rows . “ record(s)”; ระบบจะทำการนับและส่งกลับ จำนวนเรคอร์ดข้อมูลที่อ่านได้จาก คำสั่ง SQL
mysql_affected_rows() รูปแบบ int mysql_affected_rows([ int db_connect ]) db_connect รายละเอียดของการเชื่อมต่อฐานข้อมูล ใช้สำหรับนับจำนวนเรคอร์ดที่มีการเปลี่ยนแปลงล่าสุด (INSERT, UPDATE, DELETE)
mysql_affected_rows() require(“connect_inc.php”); . . . $sql_login = “DELETE * FROM login”; $login_result = mysql_db_query(CURRENT_DB, $sql_login); $rows = mysql_affected_rows($login_result); echo “You are delete” . $row . “ record(s)”; ระบบจะทำการนับและส่งกลับ จำนวนเรคอร์ดข้อมูลที่ได้รับ ผลกระทบจาก SQL ในกรณีที่ เป็นการ INSERT, UPDATE, DELETE
mixed mysql_result(int result, int record [, mixed field]) รูปแบบ mixed mysql_result(int result, int record [, mixed field]) result ข้อมูลที่ได้มาจาก mysql_query() หรือ mysql_db_query() record ตำแหน่งเรคอร์ด field ตำแหน่งฟิลด์ข้อมูล ใช้สำหรับแสดงผลลัพธ์ในฐานข้อมูล ตามแถว (record) และคอลัมน์(Field) ที่กำหนด
mysql_result() เมื่อเราแสดงข้อมูลในเรคอร์ด require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM login”; $login_result = mysql_db_query(CURRENT_DB, $sql_login); echo mysql_result($login_result, 0, 1); echo mysql_result($login_result, 1, 0); เมื่อเราแสดงข้อมูลในเรคอร์ด และฟิลด์ที่เราต้องการ โดยเฉพาะ เจาะจง
mysql_fetch_object() รูปแบบ int mysql_fetch_object(int result) result ข้อมูลที่ได้มาจาก mysql_query() หรือ mysql_db_query() ใช้สำหรับดึงค่าผลลัพธ์จากฐานข้อมูลไปไว้ใน object โดยที่เราจะสามารถระบุชื่อฟิลด์ได้เลย
mysql_fetch_object() require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM login”; $login_result = mysql_db_query(CURRENT_DB, $sql_login); while($obj = mysql_fetch_object($login_result)){ echo “username =” . obj -> USERNAME . “<br/>”; echo “password =” . obj -> PASSWORD . “<br/>”; } เมื่อเราแสดงข้อมูลในเรคอร์ด ที่ถูกกำหนดในลักษณะ object
int mysql_data_seek(int result, int record ) รูปแบบ int mysql_data_seek(int result, int record ) result ข้อมูลที่ได้มาจาก mysql_query() หรือ mysql_db_query() record ตำแหน่งเรคอร์ดที่ต้องการเริ่มค้นหา ใช้สำหรับระบุตำแหน่งของเรคอร์ดที่ต้องการเริ่มต้น (เรคอร์ดแรก คือ 0 )
mysql_data_seek() require(“connect_inc.php”); . . . $sql_login = "SELECT * FROM login”; $login_result = mysql_db_query(CURRENT_DB, $sql_login); mysql_data_seek($login_result, 1); // start search from record 2 while($login_rows = mysql_fetch_array($login_result)){ echo “username =” . $login_rows[“USERNAME”]; echo “password =” . $login_rows[“PASSWORD”] . “<br/>; }
int mysql_list_dbs([ int db_connect ]) รูปแบบ int mysql_list_dbs([ int db_connect ]) db_connect รายละเอียดของการเชื่อมต่อฐานข้อมูล ใช้สำหรับคืนค่าตัวชี้ (handle) ของฐานข้อมูล ใช้ร่วมกับ mysql_num_rows() เพื่อแสดงจำนวนฐานข้อมูลทั้งหมด หรือใช้ร่วมกับ mysql_tablename() เพื่อแสดงชื่อของฐานข้อมูลที่เรากำหนด
mysql_list_dbs() require(“connect_inc.php”); . . . $db_list = mysql_list_dbs($db); echo "You have " . mysql_num_rows($db_list) . " database(s)" ;
int mysql_list_tables(string dbname [, int db_connect ]) รูปแบบ int mysql_list_tables(string dbname [, int db_connect ]) dbname ชื่อของฐานข้อมูลที่ต้องการแสดงรายละเอียดตาราง db_connect รายละเอียดของการเชื่อมต่อฐานข้อมูล ใช้สำหรับคืนค่าตัวชี้ (handle) ของฐานข้อมูลที่เราระบุ โดยใช้ร่วมกับ mysql_list_dbs() เพื่อแสดงจำนวนตารางข้อมูลทั้งหมดในฐานข้อมูล หรือใช้ร่วมกับ mysql_tablename() เพื่อแสดงรายชื่อของตาราง
mysql_list_tables() require(“connect_inc.php”); . . . $table_list = mysql_list_tables(CURRENT_DB, $db); echo "You have ". mysql_num_rows($table_list) ." table(s) in “ .CURRENT_DB. “ database”; ;
mysql_list_fields() รูปแบบ int mysql_list_fields(string dbname, string table_name [, int db_connect ]) dbname ชื่อของฐานข้อมูลที่ต้องการแสดงรายละเอียดตาราง table_name ชื่อของตาราง db_connect รายละเอียดของการเชื่อมต่อฐานข้อมูล ใช้สำหรับคืนค่าตัวชี้ (handle) ของฐานข้อมูลที่เราระบุ โดยจะแสดงรายชื่อฟิลด์ที่จัดเก็บในตารางที่เราต้องการแสดงรายละเอียดฟิลด์
mysql_list_fields() require(“connect_inc.php”); . . . $field_list = mysql_list_fields(CURRENT_DB, “login”, $db); while($i < mysql_num_fields($field_list)){ echo “field name = “ . mysql_field_name($field_list, $i) . “<br/>”; echo “field flag = “ . mysql_field_flags($field_list, $i) . “<br/>”; echo “field type = “ . mysql_field_type($field_list, $i) . “<br/>”; $i++; }
int mysql_tablename( int handle, int number) รูปแบบ int mysql_tablename( int handle, int number) handle ตัวชี้ (handle) ของฐานข้อมูล number ลำดับของฐานข้อมูลหรือตารางที่ต้องการแสดง ใช้แสดงชื่อของฐานข้อมูล หรือ ตารางที่เราระบุ
mysql_tablename() require(“connect_inc.php”); . . . $db_list = mysql_list_dbs($db); echo "You have " . mysql_num_rows($db_list) . " database(s) <br/>"; for($i=0; $i < mysql_num_rows($db_list); $i++){ echo $i + 1 . ". " . mysql_tablename($db_list, $i) . " <br/>"; } echo "<hr>"; $db_table = mysql_list_tables(CURRENT_DB, $db); echo "You have " . mysql_num_rows($db_table). " table(s) in " . CURRENT_DB . " database <br/>"; for($i=0; $i < mysql_num_rows($db_table); $i++){ echo $i + 1 . ". " . mysql_tablename($db_table, $i) . " <br/>";
สรุป ในการเชื่อมต่อกับระหว่าง PHP กับ MySQL มีลำดับการทำงานเพื่อให้สามารถใช้งานฐานข้อมูลกับ PHP ได้อย่างถูกต้อง คือ การเชื่อมต่อกับฐานข้อมูล การเรียกใช้ฐานข้อมูลผ่านเว็บ การใช้ภาษา SQL กับฐานข้อมูล MySQL การยกเลิกการเชื่อมต่อกับฐานข้อมูล
สรุป ปัญหาอีกอย่างที่พบคือ นิสิตไม่มีความเข้าใจในความแตกต่างของชนิดข้อมูลตัวเลข สตริง และวันเวลา เพราะว่าเมื่อเราออกแบบตารางข้อมูล และกำหนดชนิดข้อมูลให้กับข้อมูลแล้วนั้น การที่นิสิตจะ SELECT, INSERT, DELETE, UPDATE ข้อมูลในตารางได้นั้นต้องระบุชนิดข้อมูลใน SQL เพื่อให้ทราบว่าค่าของฟิลด์ใดในตารางข้อมูลที่เป็นตัวเลข หรือ สตริง หรือ วันเวลา