メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

PHP และ Database: การเชื่อมต่อและ Query (MySQL)

บทความนี้อธิบายวิธีการเชื่อมต่อ PHP กับฐานข้อมูล MySQL โดยใช้ `mysqli` extension รวมถึงขั้นตอนการสร้างการเชื่อมต่อ, การ Query ข้อมูล (SELECT, INSERT), และการป้อ...

PHP และ Database: การเชื่อมต่อและ Query (MySQL)

ในบทที่ผ่านมา เราได้เรียนรู้เกี่ยวกับการจัดการข้อมูลผู้ใช้ด้วย Cookies และ Sessions คราวนี้เราจะก้าวไปอีกขั้นด้วยการเรียนรู้วิธีการเชื่อมต่อ PHP กับฐานข้อมูล MySQL เพื่อจัดเก็บและดึงข้อมูลที่ซับซ้อนและมีปริมาณมาก การเชื่อมต่อกับฐานข้อมูลเป็นทักษะที่สำคัญอย่างยิ่งสำหรับการพัฒนาเว็บแอปพลิเคชันที่สามารถจัดการข้อมูลได้อย่างมีประสิทธิภาพ

ทำไมต้อง MySQL?

MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System หรือ RDBMS) ที่ได้รับความนิยมอย่างมากเนื่องจากเป็น Open Source, มีประสิทธิภาพสูง, และใช้งานง่าย นอกจากนี้ MySQL ยังทำงานร่วมกับ PHP ได้อย่างราบรื่น ทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการพัฒนาเว็บแอปพลิเคชันขนาดเล็กไปจนถึงขนาดใหญ่

การเชื่อมต่อ MySQL

PHP มีฟังก์ชันมากมายสำหรับการเชื่อมต่อกับ MySQL ในบทนี้เราจะใช้ mysqli (MySQL Improved Extension) ซึ่งเป็นส่วนขยายที่ปรับปรุงจาก mysql เดิม และมีประสิทธิภาพและความปลอดภัยที่ดีกว่า

ข้อควรจำ: ก่อนที่จะเริ่ม คุณต้องมี MySQL Server ติดตั้งและทำงานอยู่บนเครื่องของคุณ และคุณต้องมี Database ที่คุณต้องการเชื่อมต่อ

ขั้นตอนการเชื่อมต่อ

  1. สร้างการเชื่อมต่อ: ใช้ฟังก์ชัน mysqli_connect() เพื่อสร้างการเชื่อมต่อกับ MySQL Server
  2. ตรวจสอบการเชื่อมต่อ: ตรวจสอบว่าการเชื่อมต่อนั้นสำเร็จหรือไม่
  3. เลือก Database: ใช้ฟังก์ชัน mysqli_select_db() เพื่อเลือก Database ที่ต้องการใช้งาน
  4. ทำการ Query: ส่งคำสั่ง SQL ไปยัง Database ด้วยฟังก์ชัน mysqli_query()
  5. จัดการผลลัพธ์: ดึงข้อมูลจากผลลัพธ์ที่ได้จาก Query
  6. ปิดการเชื่อมต่อ: ปิดการเชื่อมต่อเมื่อใช้งานเสร็จด้วยฟังก์ชัน mysqli_close()

ตัวอย่างโค้ดการเชื่อมต่อ

<?php

// ข้อมูลสำหรับการเชื่อมต่อ
$servername = "localhost"; // หรือ IP Address ของ Server
$username = "username"; // Username ของ MySQL
$password = "password"; // Password ของ MySQL
$database = "mydatabase"; // ชื่อ Database ที่ต้องการเชื่อมต่อ

// สร้างการเชื่อมต่อ
$conn = mysqli_connect($servername, $username, $password, $database);

// ตรวจสอบการเชื่อมต่อ
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully to database: " . $database;

// ปิดการเชื่อมต่อ
mysqli_close($conn);

?>

คำอธิบายโค้ด:

  • $servername, $username, $password, และ $database เป็นตัวแปรที่เก็บข้อมูลสำหรับการเชื่อมต่อ
  • mysqli_connect() สร้างการเชื่อมต่อกับ MySQL Server โดยรับข้อมูลการเชื่อมต่อเป็น Parameter
  • if (!$conn) ตรวจสอบว่าการเชื่อมต่อนั้นสำเร็จหรือไม่ หากไม่สำเร็จจะแสดงข้อความผิดพลาดและหยุดการทำงานของ Script
  • mysqli_close($conn) ปิดการเชื่อมต่อกับ MySQL Server เมื่อใช้งานเสร็จ

ข้อผิดพลาดที่พบบ่อย

  • Connection refused: เกิดขึ้นเมื่อ MySQL Server ไม่ทำงาน หรือ Firewall บล็อกการเชื่อมต่อ
  • Access denied: เกิดขึ้นเมื่อ Username หรือ Password ไม่ถูกต้อง
  • Database not found: เกิดขึ้นเมื่อ Database ที่ระบุไม่มีอยู่

การ Query ข้อมูล

เมื่อเราเชื่อมต่อกับ Database ได้แล้ว ขั้นตอนต่อไปคือการ Query ข้อมูล ซึ่งเป็นการดึงข้อมูลจาก Database หรือการเปลี่ยนแปลงข้อมูลใน Database

ตัวอย่างการ Query ข้อมูล

<?php

// ข้อมูลสำหรับการเชื่อมต่อ (เหมือนเดิมจากตัวอย่างก่อนหน้า)
$servername = "localhost";
$username = "username";
$password = "password";
$database = "mydatabase";

// สร้างการเชื่อมต่อ
$conn = mysqli_connect($servername, $username, $password, $database);

// ตรวจสอบการเชื่อมต่อ
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

// คำสั่ง SQL สำหรับ Query ข้อมูล
$sql = "SELECT id, firstname, lastname FROM users";

// ทำการ Query
$result = mysqli_query($conn, $sql);

// ตรวจสอบว่ามีข้อมูลหรือไม่
if (mysqli_num_rows($result) > 0) {
  // วน Loop เพื่อแสดงข้อมูลแต่ละ Row
  while($row = mysqli_fetch_assoc($result)) {
    echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}

// ปิดการเชื่อมต่อ
mysqli_close($conn);

?>

คำอธิบายโค้ด:

  • $sql เป็นตัวแปรที่เก็บคำสั่ง SQL ที่ต้องการ Query
  • mysqli_query($conn, $sql) ส่งคำสั่ง SQL ไปยัง Database และเก็บผลลัพธ์ไว้ในตัวแปร $result
  • mysqli_num_rows($result) ตรวจสอบว่ามีข้อมูลในผลลัพธ์หรือไม่
  • mysqli_fetch_assoc($result) ดึงข้อมูลจากผลลัพธ์ทีละ Row ในรูปแบบ Associative Array
  • $row["id"], $row["firstname"], และ $row["lastname"] เป็นการเข้าถึงข้อมูลในแต่ละ Column ของ Row

ตัวอย่างการ Insert ข้อมูล

<?php

// ข้อมูลสำหรับการเชื่อมต่อ (เหมือนเดิม)
$servername = "localhost";
$username = "username";
$password = "password";
$database = "mydatabase";

// สร้างการเชื่อมต่อ
$conn = mysqli_connect($servername, $username, $password, $database);

// ตรวจสอบการเชื่อมต่อ
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

// ข้อมูลที่ต้องการ Insert
$firstname = "John";
$lastname = "Doe";
$email = "john.doe@example.com";

// คำสั่ง SQL สำหรับ Insert ข้อมูล
$sql = "INSERT INTO users (firstname, lastname, email) VALUES ('$firstname', '$lastname', '$email')";

// ทำการ Query
if (mysqli_query($conn, $sql)) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

// ปิดการเชื่อมต่อ
mysqli_close($conn);

?>

คำอธิบายโค้ด:

  • $firstname, $lastname, และ $email เป็นตัวแปรที่เก็บข้อมูลที่ต้องการ Insert
  • $sql เป็นตัวแปรที่เก็บคำสั่ง SQL สำหรับ Insert ข้อมูล
  • mysqli_query($conn, $sql) ส่งคำสั่ง SQL ไปยัง Database และตรวจสอบว่าสำเร็จหรือไม่
  • mysqli_error($conn) แสดงข้อความผิดพลาดหากการ Query ไม่สำเร็จ

การป้องกัน SQL Injection

SQL Injection เป็นช่องโหว่ด้านความปลอดภัยที่ร้ายแรง ซึ่งผู้ไม่ประสงค์ดีสามารถใช้เพื่อแทรกคำสั่ง SQL ที่เป็นอันตรายเข้าไปใน Query ของเราได้ เพื่อป้องกัน SQL Injection เราควรใช้ฟังก์ชัน mysqli_real_escape_string() เพื่อ Escape Characters พิเศษใน String ก่อนที่จะนำไปใช้ใน Query

ตัวอย่างการป้องกัน SQL Injection

<?php

// ข้อมูลสำหรับการเชื่อมต่อ (เหมือนเดิม)
$servername = "localhost";
$username = "username";
$password = "password";
$database = "mydatabase";

// สร้างการเชื่อมต่อ
$conn = mysqli_connect($servername, $username, $password, $database);

// ตรวจสอบการเชื่อมต่อ
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

// ข้อมูลที่ต้องการ Insert (รับมาจาก Form)
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$email = $_POST["email"];

// ป้องกัน SQL Injection
$firstname = mysqli_real_escape_string($conn, $firstname);
$lastname = mysqli_real_escape_string($conn, $lastname);
$email = mysqli_real_escape_string($conn, $email);

// คำสั่ง SQL สำหรับ Insert ข้อมูล
$sql = "INSERT INTO users (firstname, lastname, email) VALUES ('$firstname', '$lastname', '$email')";

// ทำการ Query
if (mysqli_query($conn, $sql)) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

// ปิดการเชื่อมต่อ
mysqli_close($conn);

?>

คำอธิบายโค้ด:

  • mysqli_real_escape_string($conn, $variable) Escape Characters พิเศษใน String $variable เพื่อป้องกัน SQL Injection

ข้อควรระวัง: การใช้ Prepared Statements เป็นวิธีที่ดีกว่าในการป้องกัน SQL Injection เนื่องจาก Prepared Statements จะแยกคำสั่ง SQL ออกจากข้อมูล ทำให้ไม่สามารถแทรกคำสั่ง SQL ที่เป็นอันตรายเข้าไปได้ (เราจะกล่าวถึง Prepared Statements ในบทเรียนขั้นสูง)

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการเชื่อมต่อ PHP กับฐานข้อมูล MySQL, การ Query ข้อมูล, และการป้องกัน SQL Injection การเชื่อมต่อกับฐานข้อมูลเป็นทักษะที่สำคัญสำหรับการพัฒนาเว็บแอปพลิเคชันที่สามารถจัดการข้อมูลได้อย่างมีประสิทธิภาพ ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับ Namespace ใน PHP ซึ่งเป็นวิธีการจัดระเบียบ Code ให้เป็นหมวดหมู่และหลีกเลี่ยงการชนกันของชื่อ Class และ Function

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る