PHP เชื่อมต่อกับ MySQL
PHP 5 และใหม่กว่าสามารถทำงานกับฐานข้อมูล MySQL โดยใช้:
- ส่วนขยาย MySQLi ("i" หมายถึงการปรับปรุง)
- PDO (อ็อบเจ็กต์ข้อมูล PHP)
PHP เวอร์ชันก่อนหน้าใช้ส่วนขยาย MySQL อย่างไรก็ตาม ส่วนขยายนี้เลิกใช้งานแล้วในปี 2555
ฉันควรใช้ MySQLi หรือ PDO หรือไม่
หากคุณต้องการคำตอบสั้น ๆ มันจะเป็น "สิ่งที่คุณต้องการ"
ทั้ง MySQLi และ PDO มีข้อดีดังนี้:
PDO จะทำงานบนระบบฐานข้อมูลที่แตกต่างกัน 12 ระบบ ในขณะที่ MySQLi จะทำงานกับฐานข้อมูล MySQL เท่านั้น
ดังนั้น หากคุณต้องเปลี่ยนโปรเจ็กต์ของคุณเพื่อใช้ฐานข้อมูลอื่น PDO จะทำให้กระบวนการนี้ง่ายขึ้น คุณต้องเปลี่ยนสตริงการเชื่อมต่อและแบบสอบถามเพียงเล็กน้อยเท่านั้น ด้วย MySQLi คุณจะต้องเขียนโค้ดใหม่ทั้งหมด - รวมการสืบค้นข้อมูล
ทั้งสองเป็นแบบเชิงวัตถุ แต่ MySQLi ยังมี API ขั้นตอนอีกด้วย
ทั้งสองรองรับงบที่เตรียมไว้ คำสั่งที่เตรียมไว้จะป้องกันการฉีด SQL และมีความสำคัญมากสำหรับการรักษาความปลอดภัยเว็บแอปพลิเคชัน
ตัวอย่าง MySQL ในทั้ง MySQLi และ PDO Syntax
ในบทนี้และในบทต่อๆ ไป เราสาธิตวิธีการทำงานกับ PHP และ MySQL สามวิธี:
- MySQLi (เชิงวัตถุ)
- MySQLi (ขั้นตอน)
- PDO
การติดตั้ง MySQLi
สำหรับ Linux และ Windows: ในกรณีส่วนใหญ่ส่วนขยาย MySQLi จะถูกติดตั้งโดยอัตโนมัติ เมื่อติดตั้งแพ็คเกจ php5 mysql
สำหรับรายละเอียดการติดตั้ง ไปที่: http://php.net/manual/en/mysqli.installation.php
การติดตั้ง PDO
สำหรับรายละเอียดการติดตั้ง ไปที่: http://php.net/manual/en/pdo.installation.php
เปิดการเชื่อมต่อกับ MySQL
ก่อนที่เราจะสามารถเข้าถึงข้อมูลในฐานข้อมูล MySQL เราต้องสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้:
ตัวอย่าง (MySQLi Object-Oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
หมายเหตุเกี่ยวกับตัวอย่างเชิงวัตถุด้านบน:
$connect_error ใช้งานไม่ได้จนถึง PHP 5.2.9 และ 5.3.0 หากคุณต้องการให้แน่ใจว่าเข้ากันได้กับ PHP เวอร์ชันก่อนหน้า 5.2.9 และ 5.3.0 ให้ใช้รหัสต่อไปนี้แทน:
// ตรวจสอบการเชื่อมต่อ
ว่า (mysqli_connect_error()) {
die("การเชื่อมต่อฐานข้อมูลล้มเหลว: " . mysqli_connect_error());
}
ตัวอย่าง (ขั้นตอนของ MySQL)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
ตัวอย่าง (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
หมายเหตุ:ในตัวอย่าง PDO ด้านบน เราได้ ระบุฐานข้อมูล (myDB)ด้วย PDO ต้องการฐานข้อมูลที่ถูกต้องเพื่อเชื่อมต่อ หากไม่มีการระบุฐานข้อมูล ข้อยกเว้นจะถูกส่งออกไป
เคล็ดลับ:ประโยชน์ที่ยอดเยี่ยมของ PDO คือมีคลาสข้อยกเว้นเพื่อจัดการกับปัญหาที่อาจเกิดขึ้นในการสืบค้นฐานข้อมูลของเรา หากมีข้อยกเว้นเกิดขึ้นภายในบล็อก try{ } สคริปต์จะหยุดดำเนินการและไหลโดยตรงไปยังบล็อกแรก catch(){ }
ปิดการเชื่อมต่อ
การเชื่อมต่อจะถูกปิดโดยอัตโนมัติเมื่อสคริปต์สิ้นสุดลง หากต้องการปิดการเชื่อมต่อก่อน ให้ใช้สิ่งต่อไปนี้:
MySQLi เชิงวัตถุ:
$conn->close();
ขั้นตอน MySQLi:
mysqli_close($conn);
พีดีโอ:
$conn = null;