28,507   [PHP]การเชื่อมต่อฐานข้อมูลด้วย MySQLi

mysqli ย่อมาจาก mysql improved หรือชุดคำสั่งสำหรับติดต่อ mysql server ที่พัฒนาให้ดีขึ้นกว่า mysql 
ปล. และอีกอย่างในขณะนี้ฟังก์ชั่น MySQL ได้มีสถานะ deprecated ใน PHP5.5 แล้วครับ และจะ removed ใน version ถัดไปด้วยรวมถึงประสิทธิภาพโดยรวมของการใช้ mysqli แทน mysql จะดีขึ้นกว่าเดิม

ข้อดี

  • Object-oriented interface
    เมื่อใช้คำสั่งติดต่อกับ mysql หรือทำการ query ข้อมูลออกมา เราจะได้ข้อมูลเป็น object ซึ่ง object แต่ละตัวนี้จะสามารถใช้ method ในตัวมันได้เลย จึงทำให้การเขียนติดต่อกับ mysql หลายๆ server พร้อมกันง่ายขึ้นมากขึ้น

  • Support non-blocking, asynchronous queries with mysqlnd
    สนับสนุนการทำ query แบบ async เหมาะกับคำสั่ง INSERT , UPDATE หรือ DELETE โดยไม่จำเป็นต้องรอให้คำสั่งนั้นเสร็จก่อน สามารถทำคำสั่ง php ถัดไปได้เลย

  • Support for Prepared Statements
    สนับสนุนการทำแบบ Prepared Statements เพื่อป้องกัน SQL Injection ได้ดีที่สุด แต่อาจจะดูซับซ้อนหรือสับสนหน่อยนะครับสำหรับมือใหม่

  • Support for Multiple Statements
    สนับสนุนการทำ คำสั่งพร้อมๆกันหลายๆคำสั่ง

  • Support for Transactions
    สนับสนุนการทำ Transactions

  • Enhanced debugging capabilities
    ช่วยในการ debug code query ของ mysql มากขึ้น

  • Embedded server support
    อันนี้ไม่แน่ใจครับ

เรามาเริ่มกันเลยดีกว่าครับ พร้อมแล้ว ลุยยยยยยยยยยยยยยย!!!

พูดด้วยเรื่อง :: การเชื่อมต่อฐานข้อมูล

แบบที่ 1 :: สำหรับท่านที่คุ้นเคยกับ MySQL มันไม่ยากเลยเพียงแค่เติม i เช่น Mysql ก็เปลี่ยนเป็น Mysqli เป็นต้น

<?php
//MySQLi
$mysqli = mysqli_connect("localhost", "user", "password", "database_name");
$result = mysqli_query($mysqli, "SELECT 'ทดสอบ' AS _msg FROM DUAL");
$rows = mysqli_fetch_assoc($result);
echo $row['_msg'];

//MySQL
$mysql = mysql_connect("localhost", "user", "password", "database_name");
$result = mysql_query($mysql, "SELECT 'ทดสอบ' AS _msg FROM DUAL");
$rows = mysql_fetch_assoc($result);
echo $row['_msg'];
?>

*** ไม่แนะนำให้ใช้ชุดคำสั่งของ MySQL สำหรับนักพัฒนามือใหม่ ***

แบบที่ 2 ::  Object-oriented and procedural interface หรือการเขียนแบบอ๊อบเจ็ค ออเรนจ์ เต็ด นั่นเองครับ

<?php

// วิธีที่ 1
$mysqli = mysqli_connect("localhost", "user", "password", "database_name");
if (mysqli_connect_errno($mysqli)) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result= mysqli_query($mysqli, "SELECT 'ทดสอบ' AS _msg FROM DUAL");
$row = mysqli_fetch_assoc($result);
echo $row['_msg'];

// วิธีที่ 2
$mysqli = new mysqli("localhost", "user", "password", "database_name");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
$result= $mysqli->query("SELECT 'ทดสอบ' AS _msg FROM DUAL");
$row = $result->fetch_assoc();
echo $row['_msg'];
?>

แบบที่ 3 :: Bad coding style ไม่ค่อยเวิคนั่นเอง

<?php
$mysqli = new mysqli("localhost", "user", "password", "database_name");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}

$res = mysqli_query($mysqli, SELECT 'ทดสอบ' AS _msg FROM DUAL");
if (!$res) {
echo "Failed to run query: (" . $mysqli->errno . ") " . $mysqli->error;
}

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

*** รูปแบบที่เป็นไปได้ แต่ไม่ค่อยดีสักเท่าไหร่ ***
อ้างอิง :: http://th1.php.net/manual/en/mysqli.overview.php

 

เรามาสร้างไฟล์ สำหรับการติดต่อฐานข้อมูลกันครับ ^^

config.php

<?php

//สร้าง object ของ class mysqli
$mysqli = new mysqli();

//ทำการเชื่อมต่อกับฐานข้อมูล โดยเราจำเป็นต้องใช้ @ operator เพื่อกัน PHP แสดง warning 
//เพราะ mysqli::connect() จะทำให้เกิด PHP warning หากมี error
@$mysqli->connect (  'localhost', // host
            'root', //username
            '1234', //password
            'book_store' //default database
                             );
/*
แต่เราจะมาตรวจสอบ error ตรงนี้แทน
หากมี error ที่เกิดขึ้นระหว่างการเชื่อมต่อ เช่น username หรือ password ผิด
จะมี error message ส่งมาจาก MySQL Server โดยจะไปอยู่ใน mysqli::$connect_error
ก็ให้แสดง error message ที่ได้จาก MySQL Server และจบการทำงาน
*/
if ($mysqli->connect_error) {
    $TITLE = $mysqli->connect_error;

//ให้ error message อยู่ในรูปแบบ #<error code> - <error message>
$FATAL_ERROR = "#{$mysqli->connect_errno} - {$mysqli->connect_error}";
echo $FATAL_ERROR;
}

//กำหนด charset สำหรับการเชื่อมต่อครั้งนี้ให้เป็น utf8
$mysqli->set_charset ( 'utf8' );
?>

เครดิต :: phpinfo() 

เอาไว้ถ้าว่างเดี๋ยวจะมาต่อครับ ติดไว้ก่อน

?> if (isset($PAGINATION)) { echo $PAGINATION; } ?>
Back to Top