ในการเขียน PHP เพื่อจัดการกับฐานข้อมูล MySQL นั้น MySQLi เป็นหนึ่งในเครื่องมือมาตรฐานที่นิยมที่สุด (ย่อมาจาก MySQL Improved) ตัวมันเองรองรับการเขียนทั้งแบบ Object-Oriented (OOP) และแบบ Procedural แต่ในปัจจุบันแนะนำให้ฝึกแบบ OOP เป็นหลักเพราะอ่านง่ายและต่อยอดได้ดีกว่าครับ
การเชื่อมต่อฐานข้อมูล (Database Connection)
เริ่มต้นเราต้องสร้าง Object ของ MySQLi ขึ้นมาโดยใส่ที่อยู่ Host, Username, Password และชื่อฐานข้อมูลครับ
<?php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "my_website";
// สร้างการเชื่อมต่อ
$conn = new mysqli($host, $username, $password, $dbname);
// ตรวจสอบความผิดพลาด
if ($conn->connect_error) {
die("เชื่อมต่อล้มเหลว: " . $conn->connect_error);
}
echo "เชื่อมต่อสำเร็จ!";
?>
การดึงข้อมูลมาแสดงผล (SELECT)
เมื่อเชื่อมต่อได้แล้ว เราจะใช้คำสั่ง SQL ผ่าน Method $conn->query() และใช้ Loop เพื่อดึงข้อมูลออกมาแสดงผลทีละแถว
$sql = "SELECT id, firstname, lastname FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// วนลูปดึงข้อมูลทีละแถวออกมาเป็น Array แบบ Assoc
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - ชื่อ: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "ไม่พบข้อมูล";
}
การเพิ่มข้อมูลอย่างปลอดภัย (INSERT)
⚠️ ข้อควรระวัง: การเอาตัวแปรจาก User (เช่น จากฟอร์ม $_POST) ไปใส่ในคำสั่ง SQL ตรงๆ เสี่ยงต่อการโดน SQL Injection มากๆ ดังนั้นเราควรใช้ Prepared Statements เสมอครับ
// ข้อมูลสมมุติที่รับมาจากฟอร์ม
$fname = "John";
$lname = "Doe";
// 1. เตรียมคำสั่ง SQL โดยใช้เครื่องหมาย ? แทนค่าตัวแปร
$stmt = $conn->prepare("INSERT INTO users (firstname, lastname) VALUES (?, ?)");
// 2. ผูกตัวแปรเข้ากับเครื่องหมาย ? (s = string, i = integer)
$stmt->bind_param("ss", $fname, $lname);
// 3. สั่งประมวลผล
if ($stmt->execute()) {
echo "เพิ่มข้อมูลสำเร็จ!";
} else {
echo "เกิดข้อผิดพลาด: " . $stmt->error;
}
// ปิดการทำงานของ Statement
$stmt->close();
การปิดการเชื่อมต่อ
เมื่อทำงานเสร็จสิ้นแล้ว การปิด Connection จะช่วยคืนระบบทรัพยากร (Resource) ให้กับ Server ครับ
$conn->close();
สรุป: ทำไมต้องใช้ MySQLi?
- ปลอดภัย: รองรับ Prepared Statements ช่วยป้องกัน SQL Injection
- เร็ว: ทำงานร่วมกับ MySQL ได้อย่างเต็มประสิทธิภาพ
- ยืดหยุ่น: เลือกเขียนได้ทั้งแบบ OOP และ Procedural
อ่านเพิ่มเติม