แทรกข้อมูลหลายชิ้นลงใน MySQL โดยใช้ MySQLi และ PDO
ฟังก์ชัน mysqli_multi_query() สามารถใช้เพื่อรันคำสั่ง SQL หลายคำสั่งได้
ตัวอย่างต่อไปนี้เพิ่มระเบียนใหม่สามรายการลงในตาราง "MyGuests":
ตัวอย่าง (MySQLi - เชิงวัตถุ)
<?php $servername = " localhost " ; $username = " ชื่อ
ผู้ ใช้ " ; $ password = " รหัสผ่าน " ; $dbname = " myDB " ; $conn = ใหม่ mysqli ( $servername , $username , $password , $dbname ) ; // ตรวจสอบลิงค์ ถ้า ( $conn -> Connect_error ) - die ( " การเชื่อมต่อล้มเหลว: " . $ conn -> Connect_error ) ; $sql = " INSERT INTO MyGuests (ชื่อ, นามสกุล, อีเมล) VALUES ('John', 'Doe', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (ชื่อ, นามสกุล, อีเมล) ค่า ('แมรี่', 'โม', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (ชื่อ นามสกุล อีเมล)ค่า ('Julie', 'Dooley', '[email protected]') " ; ถ้า ( $conn -> multi_query ( $sql ) === TRUE ) - เสียงสะท้อน " แทรกบันทึกใหม่เรียบร้อย แล้ว " ; อื่น - เสียงสะท้อน " ข้อ ผิด พลาด : " . $ sql . " <br> " . $conn - > ปิด ( ) ; | โปรดทราบว่าแต่ละคำสั่ง SQL จะต้องคั่นด้วยเครื่องหมายอัฒภาค |
---|
ตัวอย่าง (MySQLi - เน้นขั้นตอน)
<?php $servername = " localhost " ; $username = " ชื่อ
ผู้ ใช้ " ; $ password = " รหัสผ่าน " ; $dbname = " myDB " ; $ conn = mysqli_connect ( $servername , $username , $password , $ dbname ) ; ถ้า ( ! $conn ) - die ( " การ
เชื่อม ต่อ
ล้ม เหลว: " . mysqli_connect_error ( ) ; $sql = " INSERT INTO MyGuests (ชื่อ, นามสกุล, อีเมล) VALUES ('John', 'Doe', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (ชื่อ, นามสกุล, อีเมล) ค่า ('แมรี่', 'โม', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (ชื่อ นามสกุล อีเมล)ค่า ('Julie', 'Dooley', '[email protected]') " ; ถ้า ( mysqli_multi_query ( $conn , $sql ) ) - เสียงสะท้อน " แทรกบันทึกใหม่เรียบร้อย แล้ว " ; อื่น - เสียงสะท้อน " ข้อ ผิด พลาด : " . $ sql . " <br> " . mysqli_close ( $ conn ) ; ตัวอย่าง (PDO)
<?php $servername = " localhost " ; $username = " ชื่อ ผู้ใช้ " ; $password = " รหัสผ่าน " ; $dbname = " myDBPDO " ; - $conn = ใหม่ PDO ( " mysql:host= $servername ;dbname= $dbname " , $username , $password ) ; // ตั้งค่าโหมดข้อผิดพลาด PDO เป็นข้อยกเว้น $ conn - > setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION ) ; $conn -> startTransaction ( ) ; // คำสั่ง SQL $conn -> exec ( " INSERT INTO MyGuests (ชื่อ นามสกุล อีเมล) ค่า ('John', 'Doe', '[email protected]') " ) ; $conn -> exec ( " INSERT INTO MyGuests (firstname , นามสกุล, อีเมล) ค่า ('Mary', 'Moe', '[email protected]') " ) ; $conn -> exec ( " INSERT INTO MyGuests (ชื่อ นามสกุล อีเมล) ค่า ('Julie', 'Dooley', '[email protected]') " ) // ส่ง ธุรกรรม $conn - > กระทำ ( ) ; " แทรกบันทึกใหม่เรียบร้อย แล้ว " ; จับ ( PDOException $อี ) - // หากการดำเนินการล้มเหลว ให้ย้อนกลับ $conn -> ย้อน กลับ ( ) ; $ sql . " <br> " . $e -> getMessage ( ) ; $conn = โมฆะ ; ?> ใช้ข้อความที่เตรียมไว้
ส่วนขยาย mysqli มีวิธีที่สองในการแทรกคำสั่ง
เราสามารถจัดเตรียมคำสั่งและพารามิเตอร์การผูกได้
ส่วนขยาย mysql สามารถส่งคำสั่งหรือการสืบค้นไปยังฐานข้อมูล mysql โดยไม่มีข้อมูล คุณสามารถเชื่อมโยงหรือ "ผูก" ตัวแปรแบบ nematically ได้
ตัวอย่าง (MySQLi ใช้คำสั่งที่เตรียมไว้)
<?php $servername = " localhost " ; $username = " ชื่อ ผู้ใช้ " ; $password = " รหัสผ่าน " ; $ dbname = " myDB " ; $conn = ใหม่ mysqli ( $servername , $username , $password , $dbname ) ; // ตรวจจับการเชื่อมต่อ ถ้า ( $conn -> Connect_error ) - die ( " การเชื่อมต่อล้มเหลว: " . $ conn -> Connect_error ) ; อื่น - $sql = " INSERT INTO MyGuests(ชื่อ, นามสกุล, อีเมล) VALUES(?, ?, ?) " ; // เตรียมใช้งาน object คำสั่งสำหรับ mysqli_stmt_prepare() $stmt = mysqli_stmt_init ( $conn ) ; // กำลังประมวลผลคำสั่ง ถ้า ( mysqli_stmt_prepare ( $stmt , $sql ) ) - // ผูกพารามิเตอร์ mysqli_stmt_bind_param ( $stmt , ' sss ' , $firstname , $lastname , $email ) ; // ตั้งค่าพารามิเตอร์และดำเนินการ $ firstname = ' จอ ห์ น ' ; $ lastname = ' แม รี่ ' ; $ lastname = ' โม เอะ ' ; @ example.com ' ; $ stmt_execute ( $ stmt ) ; $ firstname = ' จู ลี่ ' ; ; $ email = ' [email protected] ;- - เราจะเห็นได้ว่ามีการใช้โมดูลาร์ในการแก้ปัญหาในตัวอย่างข้างต้น เราสามารถอ่านและจัดการได้ง่ายขึ้นโดยการสร้างบล็อคโค้ด
ให้ความสนใจกับการเชื่อมโยงพารามิเตอร์ ลองดูโค้ดใน mysqli_stmt_bind_param():
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
ฟังก์ชันนี้จะผูกแบบสอบถามพารามิเตอร์และส่งพารามิเตอร์ไปยังฐานข้อมูล พารามิเตอร์ที่สองคือ "sss" รายการต่อไปนี้แสดงประเภทพารามิเตอร์ อักขระ s บอก mysql ว่าพารามิเตอร์นั้นเป็นสตริง
อาจเป็นพารามิเตอร์สี่ตัวต่อไปนี้:
ฉัน - จำนวนเต็ม
d - จำนวนจุดลอยตัวที่มีความแม่นยำสองเท่า
ส - สตริง
b - ค่าบูลีน
พารามิเตอร์แต่ละตัวจะต้องระบุประเภทเพื่อให้มั่นใจถึงความปลอดภัยของข้อมูล การตัดสินประเภทสามารถลดความเสี่ยงของช่องโหว่ของการแทรก SQL