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 MySQL เตรียมงบ

งบเตรียมการป้องกันการฉีด MySQL เป็นประโยชน์อย่างมาก


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

เตรียมงบสำหรับการดำเนินการส่วนใหญ่ของคำสั่ง SQL เดียวกันและดำเนินการได้อย่างมีประสิทธิภาพมากขึ้น

ผลงานของงบเตรียมดังต่อไปนี้:

  1. การปรับสภาพ: สร้างแม่แบบคำสั่ง SQL ที่ส่งไปยังฐานข้อมูล ค่าของพารามิเตอร์ที่สงวนไว้ "?" มาร์ค ตัวอย่างเช่น:

    INSERT 
    	INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  2. การวิเคราะห์ฐานข้อมูลรวบรวมดำเนินการเพิ่มประสิทธิภาพการค้นหาแม่แบบงบ SQL และเก็บผลที่ได้คือไม่เอาท์พุท

  3. การดำเนินการ: ในที่สุดค่าของพารามิเตอร์ที่ส่งผ่านไปยังโปรแกรมประยุกต์ที่มีผลผูกพัน ( "?" มาร์ค), ฐานข้อมูลงบดำเนินการ การประยุกต์ใช้งานสามารถดำเนินการได้หลายครั้งถ้าค่าพารามิเตอร์ที่ไม่เหมือนกัน

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

  • เตรียมงบช่วยลดเวลาการวิเคราะห์เพียงแบบสอบถาม (แม้ว่างบจะดำเนินการ)

  • พารามิเตอร์ที่ถูกผูกไว้เพื่อลดแบนด์วิดธ์ของเซิร์ฟเวอร์คุณจะต้องส่งแบบสอบถามพารามิเตอร์แทนคำสั่งทั้งหมด

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


MySQLi เตรียมงบ

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

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

<php?
$ Servername = "localhost";
$ username = "ชื่อผู้ใช้";
รหัสผ่าน $ = "รหัสผ่าน";
$ Dbname = "myDB";

// สร้างการเชื่อมต่อ
$ Conn = mysqli ใหม่ ($ ServerName, $ ชื่อผู้ใช้รหัสผ่าน $, $ dbname);

// ทดสอบการเชื่อมต่อ
ถ้า ($ conn-> connect_error) {
ตาย ( "การเชื่อมต่อล้มเหลว:" $ conn-> connect_error.);
}

// การปรับสภาพและมีผลผูกพัน
$ Stmt = $ conn-> เตรียมความพร้อม ( "INSERT INTO MyGuests (ชื่อ, นามสกุล, อีเมล) VALUES (,,) ???");
$ Stmt-> bind_param ( "SSS", $ FirstName, $ นามสกุล, อีเมล $);

// ตั้งค่าพารามิเตอร์และดำเนินการ
$ นามสกุล = "จอห์น";
$ นามสกุล = "โด";
$ อีเมล์ = "[email protected]";
$ Stmt-> รัน ();

$ นามสกุล = "แมรี่";
$ นามสกุล = "หม้อ";
$ อีเมล์ = "[email protected]";
$ Stmt-> รัน ();

$ นามสกุล = "จูลี่";
$ นามสกุล = "Dooley";
$ อีเมล์ = "[email protected]";
$ Stmt-> รัน ();

echo "บันทึกใหม่จะถูกแทรกประสบความสำเร็จ";

$ Stmt-> close ();
$ Conn-> close ();
?>

แยกแต่ละบรรทัดของรหัสในตัวอย่างต่อไปนี้:

"INSERT INTO MyGuests (ชื่อ, นามสกุล, อีเมล) VALUES (?,?,?)"

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

ถัดไปให้เราดูที่ bind_param () ฟังก์ชัน:

$ Stmt-> bind_param ( "SSS", $ FirstName, $ นามสกุล, อีเมล $);

พารามิเตอร์ฟังก์ชั่นการผูก SQL และบอกค่าของพารามิเตอร์ฐานข้อมูล "สสส" คอลัมน์การประมวลผลพารามิเตอร์ชนิดข้อมูลสำหรับพารามิเตอร์ที่เหลือ อักขระบอกฐานข้อมูลที่สตริงพารามิเตอร์

มีสี่ชนิดของพารามิเตอร์:

  • I - จำนวนเต็ม (จำนวนเต็ม)
  • D - คู่ (จุดแม่นยำสองลอย)
  • s - สตริง (String)
  • B - หยด (วัตถุขนาดใหญ่ไบนารี: วัตถุขนาดใหญ่ binary)

แต่ละพารามิเตอร์จะต้องระบุประเภท

พารามิเตอร์ชนิดข้อมูลบอกว่าฐานข้อมูลที่คุณสามารถลดความเสี่ยงของการฉีดของ SQL

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


PDO เตรียมงบใน

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

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

<php?
$ Servername = "localhost";
$ username = "ชื่อผู้ใช้";
รหัสผ่าน $ = "รหัสผ่าน";
$ Dbname = "myDBPDO";

try {
$ Conn = ใหม่ PDO ( "MySQL: host = $ servername; dbname = $ dbname", $ ชื่อผู้ใช้รหัสผ่าน $);
// การตั้งค่าโหมดยกเว้นข้อผิดพลาด PDO
$ Conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);

// การปรับสภาพและ SQL พารามิเตอร์ผูก
$ Stmt = $ conn-> เตรียมความพร้อม ( "INSERT INTO MyGuests (ชื่อ, นามสกุล, อีเมล์)
VALUES (: FirstName ,: นามสกุล ,: อีเมล) ");
$ Stmt-> bindParam ( ': FirstName', $ FirstName);
$ Stmt-> bindParam ( 'นามสกุล', $ นามสกุล);
$ Stmt-> bindParam ( 'อีเมล', $ อีเมล);

// แทรกแถว
$ นามสกุล = "จอห์น";
$ นามสกุล = "โด";
$ อีเมล์ = "[email protected]";
$ Stmt-> รัน ();

// แทรกแถวอื่น
$ นามสกุล = "แมรี่";
$ นามสกุล = "หม้อ";
$ อีเมล์ = "[email protected]";
$ Stmt-> รัน ();

// แทรกแถวอื่น
$ นามสกุล = "จูลี่";
$ นามสกุล = "Dooley";
$ อีเมล์ = "[email protected]";
$ Stmt-> รัน ();

echo "บันทึกใหม่จะถูกแทรกประสบความสำเร็จ";
}
catch (PDOException $ E)
{
.. echo $ SQL "<br>" $ E-> getMessage ();
}
$ Conn = null;
?>