คำสั่งที่เตรียมไว้และการผูกค่า
ใช้ prepare, bindParam และ execute เพื่อป้องกัน SQL injection
คำสั่งที่เตรียมไว้และการผูกค่า เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องใช้คำสั่งที่เตรียมไว้
คำสั่งที่เตรียมไว้จะแยกโครงสร้าง SQL ออกจากข้อมูล ข้อมูลจากผู้ใช้จะถูกถือเป็นค่าเสมอ ไม่ใช่โค้ด SQL จึงทำให้ไม่สามารถใช้การแทรก SQL ได้
prepare() + execute()
ลำดับการทำงานพื้นฐานคือ เตรียมคำสั่งด้วยตัวแทนค่า แล้วจึงดำเนินการด้วยค่าต่าง ๆ
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST["email"]]);
$user = $stmt->fetch();ตัวแทนค่าที่มีชื่อ
ใช้ตัวแทนค่าที่มีชื่อ (:name) เพื่อให้อ่านเข้าใจได้ง่าย โดยเฉพาะเมื่อค่าดังกล่าวปรากฏหลายครั้ง
<?php
$stmt = $pdo->prepare(
"INSERT INTO users (name, email) VALUES (:name, :email)"
);
$stmt->execute([':name' => "Alice", ':email' => "alice@example.com"]);bindParam เทียบกับ bindValue
bindParam ผูกตัวแปรด้วยการอ้างอิง โดยจะอ่านค่าเมื่อถึงเวลาดำเนินการ ส่วน bindValue จะผูกค่าทันที
<?php
$name = "Bob";
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->bindParam(":name", $name);
$name = "Carol";
$stmt->execute(); // inserts "Carol"ตัวอย่าง bindValue
ใช้ bindValue เมื่อต้องการล็อกค่าไว้ตั้งแต่เวลาผูกค่า
<?php
$stmt = $pdo->prepare("SELECT * FROM products WHERE price < :max");
$stmt->bindValue(":max", 50.00, PDO::PARAM_INT);
$stmt->execute();ค่าคงที่ของชนิดข้อมูล
พารามิเตอร์ตัวที่สามซึ่งเป็นตัวเลือกใช้ระบุชนิดข้อมูล ได้แก่ PDO::PARAM_INT, PDO::PARAM_STR, PDO::PARAM_BOOL และ PDO::PARAM_NULL
การดำเนินการคำสั่งซ้ำ
คำสั่งที่เตรียมไว้สามารถดำเนินการได้หลายครั้ง โดยเซิร์ฟเวอร์จะคอมไพล์คำสั่งเพียงครั้งเดียว
<?php
$stmt = $pdo->prepare("INSERT INTO logs (msg) VALUES (:msg)");
foreach ($messages as $msg) {
$stmt->execute([':msg' => $msg]);
}rowCount()
หลังจาก INSERT/UPDATE/DELETE แล้ว rowCount() จะคืนค่าจำนวนแถวที่ได้รับผลกระทบ
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE active = 0");
$stmt->execute();
echo $stmt->rowCount()." users deleted";lastInsertId()
หลังจาก INSERT ให้รับคีย์หลักที่เพิ่มค่าอัตโนมัติด้วย $pdo->lastInsertId()
<?php
$stmt = $pdo->prepare("INSERT INTO articles (title) VALUES (:t)");
$stmt->execute([':t' => "My Post"]);
$newId = $pdo->lastInsertId();อย่าต่อข้อมูลจากผู้ใช้เข้าด้วยกัน
อย่าทำเช่นนี้: "SELECT * FROM users WHERE name = '".$name."'" ให้ใช้ตัวแทนค่าเสมอ แม้ว่าคุณจะ “ทำความสะอาด” ข้อมูลแล้วก็ตาม
อ็อบเจ็กต์ PDOStatement
prepare() จะคืนค่า PDOStatement ซึ่งมี: execute(), fetch(), fetchAll(), bindParam(), bindValue() และ rowCount()
สรุป
ใช้คำสั่งที่เตรียมไว้เสมอสำหรับคำสั่งค้นหาที่มีข้อมูลจากภายนอก ควรใช้ตัวแทนค่าที่มีชื่อ ใช้ bindValue สำหรับค่าที่ต้องการผูกทันที และใช้ bindParam สำหรับการผูกค่าในลูป
ตรวจสอบอย่างรวดเร็ว
bindParam จะอ่านค่าเมื่อใด
คำถามที่พบบ่อย
บทเรียน “คำสั่งที่เตรียมไว้และการผูกค่า” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คำสั่งที่เตรียมไว้และการผูกค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คำสั่งที่เตรียมไว้และการผูกค่า”
ใช้ prepare, bindParam และ execute เพื่อป้องกัน SQL injection คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คำสั่งที่เตรียมไว้และการผูกค่า” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเชื่อมต่อ MySQL ด้วย PDO
- คำสั่งที่เตรียมไว้และการผูกค่า
- การดึงผลลัพธ์ด้วย PDO
- ทรานแซกชันด้วย PDO