มาใช้ mysqli แทน mysql แบบเดิม ใน php กันอย่างง่าย
รูปแบบไม่มีอะไรมาก
เริ่มต้น สร้างไฟล์ connect.php สำหรับใช้ในการเชิ่อมต่อฐานข้อมูล mysql
<?php
// connect.php
$db_config=array(
"host"=>"localhost", // กำหนด host
"user"=>"root", // กำหนดชื่อ user
"pass"=>"", // กำหนดรหัสผ่าน
"dbname"=>"test", // กำหนดชื่อฐานข้อมูล
"charset"=>"utf8" // กำหนด charset
);
$mysqli = @new mysqli($db_config["host"], $db_config["user"], $db_config["pass"], $db_config["dbname"]);
if(mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
exit;
}
if(!$mysqli->set_charset($db_config["charset"])) { // เปลี่ยน charset เป้น utf8 พร้อมตรวจสอบการเปลี่ยน
// printf("Error loading character set utf8: %sn", $mysqli->error); // ถ้าเปลี่ยนไม่ได้
}else{
// printf("Current character set: %sn", $mysqli->character_set_name()); // ถ้าเปลี่ยนได้
}
//echo $mysqli->character_set_name(); // แสดง charset เอา comment ออก
//echo 'Success... ' . $mysqli->host_info . "n";
//$mysqli->close();
?>
Ex.
<?php
include("connect.php");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css" />
<title>Test mysqli 1</title>
</head>
<body>
<div class="container">
<br>
<table class="table">
<tr>
<th>#</th>
<th>Province</th>
</tr>
<?php
$i=1;
$q="
SELECT * FROM province_th LIMIT 30
";
$result = $mysqli->query($q); // ทำการ query คำสั่ง sql
$total=$result->num_rows; // นับจำนวนถวที่แสดง ทั้งหมด
while($rs=$result->fetch_object()){ // วนลูปแสดงข้อมูล
?>
<tr>
<td><?=$i?></td>
<td><?=$rs->province_name?></td>
</tr>
<?php $i++; } ?>
</table>
</div>
<?php
$mysqli->close();
?>
</body>
</html>มาดูคำสั่งที่ใช้บ่อย
$result = $mysqli->query($q) ทำการ query คำสั่ง sql
$total=$result->num_rows; หาจำนวนแถวที่แสดงทั้งหมด
$mysqli->close(); ปิดการเชิ่อมต่อ server database mysql
การวนลูปแสดงข้อมูล มีให้เลือก 4 แบบ
$result->fetch_assoc() ส่งค่ากลับมาแบบ array key เป็นชื่อ field
$result->fetch_row() ส่งค่ากลับมาแบบ array key เป็น index เริ่มที่ 0,1 ….
$result->fetch_array() ส่งค่าทั้งแบบ assoc และ row เขาว่าไม่น่าใช้ กินแรม
$result->fetch_object() ส่งค่ากลับมาแบบ object
เราจะใช้ตัวนี้เป็นหลัก เหตุผล
เพราะเวลา เรียกใช้งาน ไม่ต้องใส่เครื่องหมาย ” ” เช่น $rs->province_name;
ถ้าใช้แบบ array หรือ assoc เราอาจจะต้องพิมพ์ $rs[“province_name’] ส่วนใครจะ
ถนัดแบบไหนเลือกได้
http://www.thaicreate.com/php/php-mysql-mysqli.html
เมื่อ PHP เตือน Deprecated MySQL Function จะเลิกใช้ MySQL Function แล้วนะ
ที่มาของคำเตือนเวลาเราเรียกใช้งานฟังก์ชั่น mysql_xxxxx และ ฟังก์ชั่นอื่นๆ แน่นอนครับว่า PHP เองได้มีการปรับปรุงอัพเดทฟังก์ชั่นและฟีเจอร์ต่างๆ ให้รองรับและเข้ากับเทคโนโลยีปัจจุบัน ดังนั้นการเขียนแบบเดิมจะถูกแจ้งเตือนใน PHP 5.5 ขึ้นไป เช่น
mysql_connect();
mysql_select_db();
mysql_query();
mysql_fetch_array();
และฟังก์ชั่นอื่นๆ ที่ขึ้นต้นด้วย mysql
รายละเอียดฟีเจอร์ที่ได้มีการแจ้งเตือนปรับเปลี่ยนการเขียน โดยเป็นฟีเจอร์ที่เรียกได้ว่าเก่ามากๆ โดยจะแจ้งเตือนหากมีการเรียกใช้งาน สำหรับ เวอร์ชั่นนี้ได้มีการเตือนให้ปรับการเขียนบางฟีเจอร์ดังนี้
MySQL Extension
preg_replace()
intl
mcrypt
โดยสามารถดูรายละเอียดเพิ่มเติมได้ที่ http://php.net/manual/en/migration55.deprecated.php
อ้าวแล้วอย่างนี้จะติดต่อฐานข้อมูล MySQL ได้อย่างไรล่ะ ก็ยังคงทำได้อยู่นะครับ โดยทาง PHP มีให้เลือก 2 ทางคือ
ใช้ MySQLi (MySQL Improved Extension) สามารถดูเพิ่มเติมได้ที่ http://php.net/manual/en/book.mysqli.php
ใช้ PDO (PHP Data Object) สามารถดูเพิ่มเติมได้ที่ http://php.net/manual/en/ref.pdo-mysql.php
ถ้าจะให้แนะนำนะครับ ผมว่าเริ่มที่ PDO เลยน่าจะดีกว่าเพราะสามารถเชื่อมต่อไปยังฐานข้อมูลได้มากกว่า 1 ค่าย ซึ่งถ้าใช้ mysqli จะใช้ได้เพียง MySQL เท่านั้น
ตัวอย่างการเขียนการเชื่อมต่อ MySQL ด้วย PDO
try {
$dbh = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array( PDO::ATTR_PERSISTENT => false));
$stmt = $dbh->prepare("CALL getname()");
// call the stored procedure
$stmt->execute();
echo "<B>outputting...</B><BR>";
while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) {
echo "output: ".$rs->name."<BR>";
}
echo "<BR><B>".date("r")."</B>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}