0Pricing
PHP Academy · บทเรียน

คำสั่งที่เตรียมไว้และการผูกค่า

ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเชื่อมต่อ MySQL ด้วย PDO
  2. คำสั่งที่เตรียมไว้และการผูกค่า
  3. การดึงผลลัพธ์ด้วย PDO
  4. ทรานแซกชันด้วย PDO
← กลับไปที่ PHP Academy