ฟอรั่ม | ล่าสุดการพัฒนาเว็บบทเรียน
×

PHP เกี่ยวกับการสอน

PHP บ้าน PHP แนะนำ PHP ติดตั้ง PHP วากยสัมพันธ์ PHP ตัวแปร PHP Echo / พิมพ์ PHP ชนิดข้อมูล PHP เงื่อนไข PHP ค่าคงที่ PHP ผู้ประกอบการ PHP If...Else...Elseif PHP Switch PHP ในขณะที่ลูป PHP สำหรับลูป PHP ฟังก์ชั่น PHP แถว PHP เรียงลำดับอาร์เรย์ PHP Superglobals

PHP การจัดการ

PHP ฟอร์ม การจัดการ PHP ฟอร์ม การตรวจสอบ PHP ฟอร์ม จำเป็นต้องใช้ PHP ฟอร์ม URL/E-mail PHP ฟอร์ม สมบูรณ์

PHP สูง

PHP อาร์เรย์หลายมิติ PHP วันและเวลา PHP ประกอบด้วย PHP ไฟล์ การจัดการ PHP ไฟล์ เปิด / อ่าน PHP ไฟล์ สร้าง / เขียน PHP ไฟล์ อัปโหลด PHP Cookies PHP Sessions PHP ฟิลเตอร์ PHP Filters สูง PHP ผิดพลาด การจัดการ PHP ข้อยกเว้น

MySQL Database

MySQL ฐานข้อมูล MySQL สัมพันธ์ MySQL Create DB MySQL Create ตาราง MySQL Insert Data MySQL รับ ID เข้าครั้งสุดท้าย MySQL ใส่หลาย MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML parsers PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX แนะนำ AJAX PHP AJAX ฐานข้อมูล AJAX XML AJAX ค้นหาสด AJAX RSS Reader AJAX โพลล์

PHP Examples

PHP ตัวอย่าง PHP ทดสอบ PHP ใบรับรอง

PHP การอ้างอิง

PHP แถว PHP ปฏิทิน PHP วันที่ PHP ไดเรกทอรี PHP ผิดพลาด PHP ระบบแฟ้ม PHP กรอง PHP FTP PHP HTTP PHP Libxml PHP จดหมาย PHP คณิตศาสตร์ PHP อื่น ๆ PHP MySQLi PHP SimpleXML PHP เชือก PHP XML PHP Zip PHP ช่วงเวลา

 

PHPงบเตรียม


งบเตรียมจะมีประโยชน์มากกับการฉีด SQL


งบเตรียมและพารามิเตอร์ที่ถูกผูกไว้

งบเตรียมเป็นคุณสมบัติที่ใช้ในการดำเนินการเดียวกัน (หรือคล้ายกัน) งบ SQL ซ้ำ ๆ ที่มีประสิทธิภาพสูง

งบเตรียมพื้นทำงานเช่นนี้:

  1. เตรียมความพร้อม: แม่แบบคำสั่ง SQL จะถูกสร้างขึ้นและถูกส่งตัวไปยังฐานข้อมูลCertain values are left unspecified, called parameters (labeled "?"). ค่าบางอย่างจะเหลือที่ไม่ได้ระบุเรียกว่าพารามิเตอร์ (ที่มีข้อความ "?")ตัวอย่าง: แทรก MyGuests VALUES (?,??)
  2. ฐานข้อมูลแยก, รวบรวมและดำเนินการเพิ่มประสิทธิภาพการค้นหาแม่แบบคำสั่ง SQL และเก็บผลที่ได้โดยไม่ต้องรันมัน
  3. ดำเนินการ: ในเวลาต่อมาแอพลิเคชันผูกค่าพารามิเตอร์และฐานข้อมูลรันคำสั่งThe application may execute the statement as many times as it wants with different values โปรแกรมประยุกต์อาจรันคำสั่งหลายครั้งตามที่มันต้องการที่มีค่าที่แตกต่าง

เมื่อเทียบกับการดำเนินการคำสั่ง SQL โดยตรงงบเตรียมมีสองข้อได้เปรียบหลัก:

  • เตรียมงบช่วยลดเวลาในการแยกการเตรียมแบบสอบถามที่มีการทำเพียงครั้งเดียว (แม้ว่าคำสั่งจะถูกดำเนินการหลายครั้ง)
  • พารามิเตอร์ผูกพันลดแบนด์วิดธ์ไปยังเซิร์ฟเวอร์ที่คุณต้องการส่งพารามิเตอร์เท่านั้นในแต่ละครั้งและไม่แบบสอบถามทั้งหมด
  • งบเตรียมจะมีประโยชน์มากกับการฉีด SQL เพราะค่าพารามิเตอร์ซึ่งจะถูกส่งในภายหลังโดยใช้โปรโตคอลที่แตกต่างกันไม่จำเป็นต้องหนีออกมาได้อย่างถูกต้องIf the original statement template is not derived from external input, SQL injection cannot occur. ถ้าแม่แบบคำสั่งเดิมจะไม่ได้มาจากการป้อนข้อมูลภายนอกฉีด SQL ไม่สามารถเกิดขึ้นได้

เตรียมงบใน MySQLi

ตัวอย่างต่อไปนี้ใช้งบเตรียมและพารามิเตอร์ที่ถูกผูกไว้ใน MySQLi:

ตัวอย่าง (MySQLi กับงบเตรียม)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

สายรหัสที่จะอธิบายจากตัวอย่างข้างต้น:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

ใน SQL ของเราเราใส่เครื่องหมายคำถาม (?) ที่เราต้องการเพื่อทดแทนในจำนวนเต็มสตริงมูลค่าคู่หรือหยด

จากนั้นมีลักษณะที่ bind_param () ฟังก์ชั่น:

$stmt->bind_param("sss", $firstname, $lastname, $email);

ฟังก์ชั่นนี้ผูกพา​​รามิเตอร์แบบสอบถาม SQL และบอกสิ่งที่ฐานข้อมูลพารามิเตอร์The "sss" argument lists the types of data that the parameters are. "การ SSS" โต้แย้งแสดงรายการชนิดของข้อมูลที่พารามิเตอร์ดัชนี S ตัวละครบอกว่าพารามิเตอร์ MySQL เป็นสตริง

อาร์กิวเมนต์อาจจะเป็นหนึ่งในสี่ประเภท:

  • I - จำนวนเต็ม
  • D - คู่
  • s - สตริง
  • B - หยด

เราต้องมีหนึ่งในเหล่านี้สำหรับแต่ละพารามิเตอร์

โดยบอก MySQL สิ่งที่ประเภทของข้อมูลที่จะคาดหวังว่าเราลดความเสี่ยงของการฉีดของ SQL

บันทึกหมายเหตุ: หากเราต้องการที่จะใส่ข้อมูลใด ๆ จากแหล่งภายนอก (เช่นการป้อนข้อมูลของผู้ใช้) มันเป็นสิ่งสำคัญมากที่ข้อมูลจะถูกสุขอนามัยและการตรวจสอบ

เตรียมงบใน PDO

ตัวอย่างต่อไปนี้ใช้งบเตรียมและพารามิเตอร์ที่ถูกผูกไว้ใน PDO:

ตัวอย่าง (PDO กับงบเตรียม)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (:firstname, :lastname, :email)");
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);

    // insert a row
    $firstname = "John";
    $lastname = "Doe";
    $email = "john@example.com";
    $stmt->execute();

    // insert another row
    $firstname = "Mary";
    $lastname = "Moe";
    $email = "mary@example.com";
    $stmt->execute();

    // insert another row
    $firstname = "Julie";
    $lastname = "Dooley";
    $email = "julie@example.com";
    $stmt->execute();

    echo "New records created successfully";
    }
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }
$conn = null;
?>