Latest web development tutorials
×

PHP หลักสูตร

PHP หลักสูตร PHP แนะนำโดยย่อ PHP ติดตั้ง PHP ไวยากรณ์ PHP ตัวแปร PHP echo/print PHP ชนิดข้อมูล PHP คงที่ PHP เชือก PHP ผู้ประกอบการ PHP If...Else PHP Switch PHP แถว PHP เรียงลำดับอาร์เรย์ PHP Superglobals PHP While การไหลเวียน PHP For การไหลเวียน PHP ฟังก์ชัน PHP ตัวแปรเมจิก PHP namespaces PHP เชิงวัตถุ

PHP ฟอร์ม

PHP ฟอร์ม PHP รูปแบบการตรวจสอบสิทธิ์ PHP ฟอร์ม - ฟิลด์ที่จำเป็น PHP ฟอร์ม - อีเมลยืนยันและ URL PHP ตัวอย่างสมบูรณ์แบบ PHP $_GET ตัวแปร PHP $_POST ตัวแปร

PHP การสอนที่ทันสมัย

PHP อาร์เรย์หลายมิติ PHP วันที่ PHP บรรจุ PHP ไฟล์ PHP อัปโหลดไฟล์ PHP Cookie PHP Session PHP E-mail PHP ความปลอดภัย E-mail PHP Error PHP Exception PHP กรอง PHP กรองขั้นสูง PHP JSON

PHP 7 คุณสมบัติใหม่

PHP 7 คุณสมบัติใหม่

PHP ฐานข้อมูล

PHP MySQL แนะนำโดยย่อ PHP MySQL สัมพันธ์ PHP MySQL การสร้างฐานข้อมูล PHP MySQL สร้างตารางข้อมูล PHP MySQL แทรกข้อมูล PHP MySQL ใส่ข้อมูลหลาย PHP MySQL งบเตรียม PHP MySQL อ่านข้อมูล PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX แนะนำโดยย่อ AJAX PHP AJAX ฐานข้อมูล AJAX XML AJAX ค้นหาแบบ Real-time AJAX RSS Reader AJAX โหวต

PHP คู่มืออ้างอิง

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP การประมวลผลภาพ PHP RESTful

PHP PDO เตรียมงบและวิธีการจัดเก็บ

คู่มือการใช้งาน PHP PDO อ้างอิง คู่มือการใช้งาน PHP PDO อ้างอิง

ฐานข้อมูลเป็นผู้ใหญ่มากขึ้นหลายคนสนับสนุนแนวคิดของงบที่เตรียมไว้

เป็นงบเตรียมอะไร? คิดว่ามันเป็นแม่แบบรวบรวมคุณต้องการที่จะเรียกใช้ SQL ซึ่งสามารถปรับแต่งโดยใช้พารามิเตอร์ตัวแปร งบเตรียมมีสองผลประโยชน์ที่สำคัญ:

  • แบบสอบถามแก้ไขเท่านั้น (หรือการปรับสภาพ) ครั้งเดียว แต่สามารถดำเนินการได้หลายครั้งด้วยพารามิเตอร์เดียวกันหรือแตกต่างกัน เมื่อมีการสอบถามพร้อมฐานข้อมูลจะวิเคราะห์รวบรวมและดำเนินการตามแผนเพิ่มประสิทธิภาพการค้นหา สำหรับคำสั่งที่ซับซ้อนขั้นตอนนี้ใช้เวลานานถ้าคุณจะต้องทำซ้ำหลายครั้งกับพารามิเตอร์ที่แตกต่างกันแบบสอบถามเดียวกันแล้วกระบวนการจะช่วยลดความเร็วของการประยุกต์ใช้ โดยใช้คำสั่งหลีกเลี่ยงการเตรียมการทำซ้ำวิเคราะห์ / รวบรวม / รอบเพิ่มประสิทธิภาพ ในระยะสั้นงบเตรียมใช้ทรัพยากรน้อยลงและทำให้ทำงานได้เร็วขึ้น
  • ให้พารามิเตอร์เพื่อเตรียมงบไม่จำเป็นต้องใช้เครื่องหมายคำพูดคนขับรถจะได้รับการจัดการโดยอัตโนมัติ หากใบสมัครเพียงใช้งบเตรียมเราสามารถมั่นใจได้ว่าจะไม่มีการฉีด SQL ( แต่ถ้าส่วนอื่น ๆ ของแบบสอบถามจะไม่หนีจากการป้อนข้อมูลที่จะสร้างแล้วยังคงมีความเสี่ยงของการฉีด SQL) ที่

เตรียมงบที่มีประโยชน์เพื่อให้พวกเขามีเพียงอย่างเดียวคือการประมวลผลแบบอะนาล็อกเมื่อคนขับไม่สนับสนุน PDO เพื่อให้แน่ใจว่าไม่คำนึงถึงว่าฐานข้อมูลมีฟังก์ชั่นที่คุณสามารถมั่นใจได้ว่าการใช้งานสามารถใช้รูปแบบการเข้าถึงข้อมูลเดียวกัน

แทรก PreparedStatements ซ้ำแล้วซ้ำอีก

ตัวอย่างต่อไปนี้โดยการแทนตัวยึดชื่อที่เหมาะสมที่มีชื่อและความคุ้มค่าในการดำเนินการการสอบถามแทรก

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

//  用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

แทรก PreparedStatements ซ้ำแล้วซ้ำอีก

ตัวอย่างต่อไปนี้โดยการแทนชื่อและค่า? ยึดตำแหน่งที่จะดำเนินการสอบถามแทรก

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

// 用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

ได้รับข้อมูลโดยใช้งบเตรียม

ตัวอย่างต่อไปนี้ในรูปแบบของการเข้าถึงคีย์ตามข้อมูลที่ให้ไว้แล้ว ท่านผู้ใช้ถูกปิดล้อมโดยอัตโนมัติในเครื่องหมายคำพูดจึงมีความเสี่ยงของ SQL โจมตีฉีดไม่มี

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

หากการสนับสนุนโปรแกรมควบคุมฐานข้อมูลแอพลิเคชันนี้ยังสามารถผูกเข้าและส่งออกพารามิเตอร์พารามิเตอร์ที่ส่งออกมักจะใช้เพื่อให้ได้ค่าจากการจัดเก็บ พารามิเตอร์ที่ส่งออกกว่าที่จะใช้ป้อนพารามิเตอร์ที่จะออกไปเล็กน้อยซับซ้อนมากขึ้นเพราะเมื่อมีผลผูกพันพารามิเตอร์การแสดงผลคุณต้องทราบพารามิเตอร์ของระยะเวลาที่กำหนด ถ้าค่าสำหรับพารามิเตอร์ที่มีค่ามากกว่าคำแนะนำที่มีผลผูกพันของความยาวก็จะเกิดข้อผิดพลาด

โทรขั้นตอนการเก็บไว้กับพารามิเตอร์การแสดงผล

<?php
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $return_value\n";
?>

นอกจากนี้คุณยังสามารถระบุทั้งเข้าและออกค่าของพารามิเตอร์ไวยากรณ์คือคล้ายกับพารามิเตอร์ที่ส่งออก ในตัวอย่างต่อไปสตริง "สวัสดี" จะถูกส่งผ่านไปยังขั้นตอนที่เก็บไว้เมื่อคืนขั้นตอนการเก็บสวัสดีจะถูกแทนที่ด้วยค่าตอบแทนของการจัดเก็บ

ด้วยอินพุต / พารามิเตอร์ที่ส่งออกจะเรียกเก็บขั้นตอน

<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $value\n";
?>

การใช้งานที่ไม่ถูกต้องของตัวยึด

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));

// 占位符必须被用在整个值的位置
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>

คู่มือการใช้งาน PHP PDO อ้างอิง คู่มือการใช้งาน PHP PDO อ้างอิง