บทความนี้สอนสร้าง API ด้วย PHP ฐานข้อมูล MySQL โดย API ที่เราจะสร้างทำหน้าที่ CRUD (Create, Red, Update, Delete) โดยใช้คำสั่ง SQL ร่วมกับ mysqli และสอนการใช้คำสั่ง curl เพื่อทดสอบ API ดังกล่าวทั้งการสื่อสารแบบ POST และแบบ GET สามารถเขียนโปรแกรมได้ดังนี้
ตัวอย่าง วิธีสร้าง API ด้วย PHP MySQL
1. สร้างฐานข้อมูลชื่อ mydatabase และรันคำสั่ง SQL ด้านล่างเพื่อสร้างตาราง product และเพิ่มข้อมูลตัวอย่างลงในตาราง product
CREATE TABLE `product` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `product` (`id`, `name`) VALUES
(1, 'Computer'),
(2, 'Nodebook'),
(3, 'Mobile Phone');
2. สร้างไฟล์ db.php ทำหน้าที่เชื่อมต่อฐานข้อมูล MySQL ด้วยคำสั่ง mysqli
<?php
$server = "localhost";
$username = "myuser";
$password = "mypassword";
$dbname = "mydatabase";
$conn = new mysqli($server, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
จากตัวอย่างเชื่อมต่อฐานข้อมูล MySQL ด้วย
- server คือ localhost
- username คือ myuser
- password คือ mypassword
- dbname คือ mydatabase
* สามารถเปลี่ยนแปลงได้ตามการตั้งค่าตอนติดตั้ง MySQL
3. สร้าง API ด้วย PHP ทำหน้าที่แสดงข้อมูล (Read) ชื่อไฟล์ read.php
<?php
header("Content-Type: application/json; charset=UTF-8");
require( "db.php" );
$sql = "SELECT * FROM product";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$rows = array();
while($row = $result->fetch_assoc()) {
$rows[] = $row;
}
echo json_encode($rows);
} else {
echo "0 results";
}
$conn->close();
?>
ทดสอบโดยการเปิด cmd และใช้คำสั่ง curl รันคำสั่งด้านล่าง จากตัวอย่างเป็นการสื่อสารแบบ GET
curl http://localhost:8000/read.php
ผลลัพธ์
[
{"id":"1","name":"x"},
{"id":"2","name":"Nodebook"},
{"id":"3","name":"Mobile Phone"}
]
จากตัวอย่าง API ทำหน้าที่ดึงข้อมูลทั้งหมดจากตาราง product และคืนค่ากลับมาให้ผู้เรียกใช้ API แบบ JSON
4. สร้าง API ด้วย PHP ทำหน้าที่เพิ่มข้อมูล (Create) ชื่อไฟล์ create.php
<?php
header("Content-Type: application/json; charset=UTF-8");
if($_SERVER['REQUEST_METHOD'] === 'POST') {
require( "db.php" );
$name = $_POST['name'];
$stmt = $conn->prepare("INSERT INTO product (name) VALUES (?)");
$stmt->bind_param("s", $name);
if ($stmt->execute() === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $stmt . "<br>" . $conn->error;
}
}
$conn->close();
?>
ทดสอบ API นี้ด้วยคำสั่ง curl มีการส่งค่า name เพื่อนำไปเพิ่มข้อมูลลงในตาราง product และระบุว่าเป็นการสื่อสารแบบ POST ตามคำสั่งด้านล่าง
curl -d "name=pencil" -X POST http://localhost:8000/create.php
ผลลัพธ์
New record created successfully
5. สร้าง API ด้วย PHP ทำหน้าที่แก้ไขข้อมูล (Update) ชื่อไฟล์ update.php
<?php
header("Content-Type: application/json; charset=UTF-8");
if($_SERVER['REQUEST_METHOD'] === 'POST') {
require( "db.php" );
$id = $_POST['id'];
$name = $_POST['name'];
$stmt = $conn->prepare("UPDATE product SET name = ? WHERE id = ?");
$stmt->bind_param("si", $name, $id);
if ($stmt->execute() === TRUE) {
echo "Update record successfully";
} else {
echo "Error: " . $stmt . "<br>" . $conn->error;
}
}
$conn->close();
?>
ทดสอบ API นี้ด้วยคำสั่ง curl มีการส่งค่า name และ id โดย name คือข้อมูลที่ใหม่ และ id คือรหัสแถวที่ต้องการแก้ไขในตาราง product และระบุว่าเป็นการสื่อสารแบบ POST ตามคำสั่งด้านล่าง
curl -d "name=pen&id=4" -X POST http://localhost:8000/update.php
ผลลัพธ์
Update record successfully
6. สร้าง API ด้วย PHP ทำหน้าที่ลบข้อมูล (Delete) ชื่อไฟล์ delete.php
<?php
header("Content-Type: application/json; charset=UTF-8");
if($_SERVER['REQUEST_METHOD'] === 'POST') {
require( "db.php" );
$id = $_POST['id'];
$stmt = $conn->prepare("DELETE FROM product WHERE id = ?");
$stmt->bind_param("i", $id);
if ($stmt->execute() === TRUE) {
echo "Delete record successfully";
} else {
echo "Error: " . $stmt . "<br>" . $conn->error;
}
}
$conn->close();
?>
ทดสอบ API นี้ด้วยคำสั่ง curl มีการส่งค่า id เพื่อบอกให้ API ทราบว่าจะลบข้อมูลแถวไหนในตาราง product และระบุว่าเป็นการสื่อสารแบบ POST ตามคำสั่งด้านล่าง
curl -d "id=8" -X POST http://localhost:8000/delete.php
ผลลัพธ์
Delete record successfully