PHP MySQL Prepared Statement / Parameter Query (mysqli) |
PHP MySQL Prepared Statement / Parameter Query (mysqli) บทความนี้จะเป็นการสรุปคำสั่งและรูปแบบการใช้ PHP ติดต่อกับ MySQL ผ่าน function ของ mysqli ที่ทันสมัยล่าสุด มีประสิทธิภาพทำงานได้รวดเร็ว และมีความปลอดภัยในระดับหนึ่ง รองรับการเขียนได้หลากหลายรูปแบบ เช่นแบบ OOP โดยในบทความนี้จะยกตัวอย่างแบบกระทัดรัด ว่าในแต่ล่ะรูปแบบที่จำเป็นต่อการใช้งานนั้นมีรูปแบบอย่างไรบ้าง ซึ่งในบทความนี้แทบจะเรียกได้ว่า ครบสำหรับการใช้งานพื้นฐานทั่ว ๆ ไปเลยทีเดียว
จะเห็นได้ว่าในการ Query ผ่าน mysqli ในบทความนี้จะเลือกใช้แบบ Prepared Statement หรือแบบ Parameters Query ทั้งนี้เพื่อเป็นการลดปัญหาหรือข้อผิดพลาด ช่องโหว์การ Hack ผ่าน SQL Injection ที่จะให้การทำงานของโปรแกรมนั้นผิดพลาดได้ เมื่อพบกับข้อมูลในรูปแบบต่าง ๆ
MySQL Table
CREATE TABLE `customer` (
`CustomerID` varchar(4) NOT NULL,
`Name` varchar(50) NOT NULL,
`Email` varchar(50) NOT NULL,
`CountryCode` varchar(2) NOT NULL,
`Budget` double NOT NULL,
`Used` double NOT NULL,
PRIMARY KEY (`CustomerID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `customer` VALUES ('C001', 'Win Weerachai', '[email protected]', 'TH', 1000000, 600000);
INSERT INTO `customer` VALUES ('C002', 'John Smith', '[email protected]', 'UK', 2000000, 800000);
INSERT INTO `customer` VALUES ('C003', 'Jame Born', '[email protected]', 'US', 3000000, 600000);
INSERT INTO `customer` VALUES ('C004', 'Chalee Angel', '[email protected]', 'US', 4000000, 100000);

ฐานข้อมูลและตารางของ MySQL Database
select.php (การ Select ข้อมูล แบบ 1 รายการ)
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$conn = new mysqli($serverName,$userName,$userPassword,$dbName);
$strCustomerID = "C001";
$sql = "SELECT * FROM customer WHERE CustomerID = ? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $strCustomerID); // s - string, b - blob, i - int, etc
/*** for 2 Parameters
$strCustomerID = "C001";
$strEmail = "[email protected]";
$sql = "SELECT * FROM customer WHERE CustomerID = ? AND Email = ? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $strCustomerID,$strEmail); // s - string, b - blob, i - int, etc
**/
$stmt ->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if($row)
{
echo $row["CustomerID"]."<br>";
echo $row["Name"]."<br>";
echo $row["Email"]."<br>";
echo $row["CountryCode"]."<br>";
echo $row["Budget"]."<br>";
echo $row["Used"]."<br>";
}
$conn->close();
?>


list.php (การ Select ข้อมูลบบแสดงรายการ)
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$conn = new mysqli($serverName,$userName,$userPassword,$dbName);
$strCountryCode = "US";
$sql = "SELECT * FROM customer WHERE CountryCode = ? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $strCountryCode); // s - string, b - blob, i - int, etc
$stmt ->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc())
{
echo $row["CustomerID"]."<br>";
echo $row["Name"]."<br>";
echo $row["Email"]."<br>";
echo $row["CountryCode"]."<br>";
echo $row["Budget"]."<br>";
echo $row["Used"]."<br>";
echo "<hr>";
}
$conn->close();
?>

insert.php (การ Insert ข้อมูล)
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$conn = new mysqli($serverName,$userName,$userPassword,$dbName);
$strCustomerID = "C005";
$strName = "Weerachai Nukitram";
$strEmail = "[email protected]";
$strCountryCode = "TH";
$strBudget = "6000000";
$strUsed = "0";
$sql = "INSERT INTO customer (CustomerID, Name, Email, CountryCode, Budget, Used) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssssii', $strCustomerID, $strName, $strEmail, $strCountryCode, $strBudget, $strUsed); // s - string, b - blob, i - int, etc
$stmt ->execute();
printf("%d Row inserted.\n", $stmt->affected_rows);
$conn->close();
?>


update.php (การ Update ข้อมูล)
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$conn = new mysqli($serverName,$userName,$userPassword,$dbName);
$strName = "Weerachai Nukitram";
$strEmail = "[email protected]";
$strCountryCode = "TH";
$strBudget = "6000000";
$strUsed = "100000";
$strCustomerID = "C005";
$sql = "UPDATE customer SET
Name = ? ,
Email = ? ,
CountryCode = ? ,
Budget = ? ,
Used = ?
WHERE CustomerID = ? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param('sssiis', $strName, $strEmail, $strCountryCode, $strBudget, $strUsed,$strCustomerID); // s - string, b - blob, i - int, etc
$stmt ->execute();
printf("%d Row updated.\n", $stmt->affected_rows);
$conn->close();
?>


delete.php (การ Delete ข้อมูล)
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$conn = new mysqli($serverName,$userName,$userPassword,$dbName);
$strCustomerID = "C005";
$sql = "DELETE FROM customer
WHERE CustomerID = ? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $strCustomerID); // s - string, b - blob, i - int, etc
$stmt ->execute();
printf("%d Row deleted.\n", $stmt->affected_rows);
$conn->close();
?>


|