แบบสอบถาม SQL เพื่อเพิ่มและลบบันทึก การเข้าสู่ฐานข้อมูล mySQL ของ PHP ตัวอย่าง PHP ที่ใช้งานได้จริงในการเพิ่มข้อมูลลงใน mysql

ในบทความนี้เราจะมาดูสิ่งที่สำคัญที่สุดบางส่วนกัน แบบสอบถาม SQL- นี้ แบบสอบถามเพื่อเพิ่มและลบบันทึกออกจากตารางฐานข้อมูล- เพราะบ่อยครั้งที่คุณต้องทำ เพิ่มบันทึกใหม่ลงในตารางและทำมันใน โหมดอัตโนมัติจึงต้องศึกษาเนื้อหานี้

เริ่มต้นด้วย แบบสอบถาม SQL เพื่อเพิ่มระเบียนใหม่ลงในตาราง:

INSERT INTO ผู้ใช้ (เข้าสู่ระบบ, ผ่าน) ค่า ("TestUser", "123456")

เมื่อเพิ่มรายการคำสั่ง " ใส่เข้าไป" จากนั้นชื่อของตารางที่เราแทรกบันทึก ถัดมาเป็นชื่อของช่องที่เราต้องการกรอกในวงเล็บ จากนั้นในวงเล็บหลังคำว่า " ค่านิยม"เราเริ่มแสดงรายการค่าของฟิลด์ที่เราเลือก หลังจากดำเนินการค้นหานี้ รายการใหม่จะปรากฏในตารางของเรา

บางครั้งก็จำเป็น อัปเดตรายการตารางสำหรับสิ่งนี้มีดังต่อไปนี้ แบบสอบถาม SQL:

อัปเดตผู้ใช้ SET เข้าสู่ระบบ = "TestUser2", pass = "1234560" WHERE เข้าสู่ระบบ = "TestUser"

แบบสอบถามนี้ซับซ้อนกว่าเนื่องจากมีโครงสร้าง " ที่ไหน"แต่เพิ่มเติมเกี่ยวกับเรื่องนี้ด้านล่าง อันดับแรกมาที่คำสั่ง" อัปเดต" แล้วตามด้วยชื่อตาราง และหลัง " ชุด"เราอธิบายค่าของฟิลด์ทั้งหมดที่เราต้องการเปลี่ยนแปลง คงจะง่าย แต่คำถามก็เกิดขึ้น: " บันทึกใดควรได้รับการปรับปรุง?“. ด้วยเหตุนี้จึงมี” ที่ไหน" ในกรณีนี้ เราอัพเดตเรคคอร์ดฟิลด์ " เข้าสู่ระบบ"อันไหนสำคัญ" ผู้ใช้ทดสอบ" โปรดทราบว่าหากมีบันทึกดังกล่าวหลายรายการแล้ว ทุกอย่างจะได้รับการอัปเดตอย่างแน่นอน- นี่เป็นสิ่งสำคัญมากที่ต้องทำความเข้าใจ ไม่เช่นนั้นคุณอาจเสี่ยงต่อการสูญเสียโต๊ะ

มาพูดคุยกันอีกหน่อยเกี่ยวกับ " ที่ไหน" นอกเหนือจากการตรวจสอบความเท่าเทียมกันแบบง่ายๆ แล้ว ยังมีความไม่เท่าเทียมกันตลอดจนการดำเนินการเชิงตรรกะด้วย: และและ หรือ.

อัปเดตผู้ใช้ SET เข้าสู่ระบบ = "TestUser2", pass = "1234560" WHERE id< 15 AND login="TestUser"

ที่ให้ไว้ แบบสอบถาม SQLจะอัปเดตบันทึกเหล่านั้น รหัสซึ่งมีน้อย 15 และสนาม " เข้าสู่ระบบ"เรื่อง" ผู้ใช้ทดสอบ“ฉันหวังว่าคุณจะเข้าใจการออกแบบ” ที่ไหน“เพราะมันสำคัญมากนั่นเอง” ที่ไหน“ใช้เมื่อ. กำลังดึงข้อมูลบันทึกจากตารางและนี่คืองานที่ใช้บ่อยที่สุดเมื่อทำงานกับฐานข้อมูล

และสุดท้ายก็เรียบง่าย แบบสอบถาม SQL เพื่อลบบันทึกออกจากตาราง:

ลบจากผู้ใช้โดยที่ล็อกอิน = "TestUser2"

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

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

ก่อนที่คุณจะเริ่มต้น ให้ตรวจสอบสิ่งต่อไปนี้:

  • เข้าถึงแผงควบคุมโฮสติ้งของคุณ

ขั้นตอนที่ 1 - การสร้างตาราง

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

หลังจากเข้าสู่หน้า phpMyAdmin แล้ว คุณจะเห็นภาพดังนี้:

มาสร้างตารางด้วยชื่อกัน นักเรียนสำหรับฐานข้อมูลของเรา u266072517_ชื่อ- คุณสามารถสร้างตารางใหม่ได้โดยใช้ปุ่ม สร้างตาราง- หลังจากนี้คุณจะได้เห็น หน้าใหม่โดยที่คุณสามารถป้อนข้อมูลที่จำเป็นทั้งหมดสำหรับตารางของคุณ:

นี่เป็นวิธีที่ง่ายที่สุดในการสร้างตาราง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างตาราง/ฐานข้อมูล และการตั้งค่าที่สามารถใช้สำหรับแต่ละฟิลด์ โปรดดูที่เอกสารอย่างเป็นทางการของ phpMyAdmin

ให้ที่นี่บางส่วน คำอธิบายง่ายๆฟิลด์ที่เราจะใช้:

  • ชื่อคือชื่อเขตข้อมูลของคุณ จะปรากฏที่ด้านบนสุดของตารางของคุณ
  • พิมพ์– ที่นี่คุณสามารถตั้งค่าประเภทฟิลด์ได้ เช่น เราเลือก วาร์ชาร์เพราะที่นี่เราต้องป้อนสตริงที่มีชื่อ (ซึ่งมีตัวอักษร ไม่ใช่ตัวเลข)
  • ความยาว/ค่า– ใช้เพื่อกำหนดความยาวสูงสุดของรายการของคุณในฟิลด์นี้
  • ดัชนี– เราใช้ดัชนี “หลัก” สำหรับช่อง “ID” ของเรา เมื่อสร้างตาราง ขอแนะนำให้มีช่อง ID หนึ่งช่อง ใช้เพื่อสร้างดัชนีบันทึกในตารางเมื่อมีการกำหนดค่าความสัมพันธ์ระหว่างตาราง นอกจากนี้ยังสามารถสังเกตได้ที่นี่ "AI"ซึ่งหมายความว่า เพิ่มขึ้นอัตโนมัติ- การตั้งค่านี้จะเพิ่มดัชนีโดยอัตโนมัติ (1,2,3,4...)

คลิก บันทึกและตารางของคุณจะถูกสร้างขึ้น

ขั้นตอนที่ 2 - สร้างโค้ด PHP และเพิ่มรายการลงในตาราง MySQL

ตัวเลือก 1 – วิธี MySQLi

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

" . mysqli_error($conn); ) mysqli_close($conn); ?>

ดังนั้นส่วนแรกของโค้ด (lines 3 – 18 ) หมายถึงส่วนการสร้างการเชื่อมต่อฐานข้อมูล เราจะไม่พูดถึงส่วนนี้อีก หากคุณต้องการทราบว่าแต่ละบรรทัดหมายถึงอะไร โปรดดูคำแนะนำก่อนหน้าของเราเกี่ยวกับวิธีการเชื่อมต่อกับฐานข้อมูล

เริ่มจากบรรทัดกันก่อน 19 :

$sql = "INSERT INTO นักเรียน (ชื่อ นามสกุล อีเมล) ค่า ("Thom", "Vial", " [ป้องกันอีเมล]")";

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

ต่อไปในวงเล็บเรากำหนดเขตข้อมูลตารางที่เราจะเพิ่มค่า: (ชื่อ นามสกุล อีเมล)- ข้อมูลจะถูกเพิ่มตามลำดับเฉพาะ ถ้าเราเขียน (อีเมล นามสกุล ชื่อ)ค่าจะถูกเพิ่มในลำดับอื่น

ส่วนความหมายต่อไป ค่านิยม- ที่นี่เราตั้งค่าของเราในฟิลด์ที่ระบุก่อนหน้า ดังนั้นแต่ละฟิลด์ก็จะได้รับมูลค่าของตัวเอง ตัวอย่างเช่น ในกรณีของเรามันจะเป็นดังนี้: name = Thom, นามสกุล = Vial, email = [ป้องกันอีเมล] .

สิ่งสำคัญที่ควรทราบคือเรากำลังสร้างที่นี่ แบบสอบถาม SQLโดยใช้โค้ด PHP คำสั่ง SQL จะต้องอยู่ในเครื่องหมายคำพูด ในตัวอย่างของเรา ทุกอย่างระหว่างเครื่องหมายคำพูดและที่อยู่หลัง $sql = เป็นการสืบค้น SQL

ส่วนถัดไปของรหัส ( 20 – 22 lines) ดำเนินการคำขอของเราและตรวจสอบความสำเร็จของคำขอ:

If (mysqli_query($conn, $sql)) ( echo "สร้างบันทึกใหม่เรียบร้อยแล้ว"; )

ข้อความแสดงความสำเร็จจะปรากฏขึ้นหากแบบสอบถามทำงานอย่างถูกต้อง

และส่วนสุดท้าย ( 22 – 24 บรรทัด) แสดงข้อความอื่นในกรณีที่คำขอของเราล้มเหลว:

อื่น ๆ ( echo "ข้อผิดพลาด: " . $sql . "
" . mysqli_error($conn); )

รหัสนี้แสดงข้อความแสดงข้อผิดพลาดในกรณีที่มีสิ่งผิดปกติเกิดขึ้น

ตัวเลือก 2 - วิธีวัตถุข้อมูล PHP (P HP D ata O bject)

เช่นเดียวกับในตัวอย่างก่อนหน้านี้ ก่อนอื่นเราต้องเชื่อมต่อกับฐานข้อมูล ซึ่งจะทำเมื่อสร้างวัตถุ PDO ใหม่ - บทช่วยสอนก่อนหน้านี้พูดถึงว่าสิ่งนี้เกิดขึ้นได้อย่างไร เนื่องจากการเชื่อมต่อฐานข้อมูล MySQL เป็นวัตถุ PDO เราจึงต้องใช้ 'วิธีการ' ของ PDO ต่างๆ (ฟังก์ชันชนิดหนึ่งที่เป็นส่วนหนึ่งของวัตถุเฉพาะ) เพื่อเตรียมและเรียกใช้แบบสอบถาม วิธีการวัตถุถูกเรียกดังนี้:

$the_Object->the_Method();

PDO อนุญาตให้คุณ 'เตรียม' รหัส SQL ก่อนที่จะดำเนินการ แบบสอบถาม SQL ได้รับการประเมินและปรับเปลี่ยนก่อนที่จะรัน ดังนั้น การโจมตีแบบฉีด SQL แบบง่ายๆ สามารถทำได้โดยการกรอกโค้ด SQL ลงในฟิลด์แบบฟอร์ม ตัวอย่างเช่น:

// ผู้ใช้เขียนสิ่งนี้ในช่องชื่อผู้ใช้ของแบบฟอร์มการเข้าสู่ระบบ thom"; DROP DATABASE user_table; // แบบสอบถามสุดท้ายกลายเป็น "SELECT * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

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

เสมอใช้แบบสอบถามที่เตรียมไว้เมื่อส่งหรือรับข้อมูลจากฐานข้อมูลด้วย PDO

หากต้องการใช้นิพจน์ที่เตรียมไว้ คุณต้องสร้างตัวแปรใหม่ที่จะเรียกใช้เมธอด เตรียมตัว()บนวัตถุฐานข้อมูล

ในรูปแบบที่ถูกต้องโค้ดจะมีลักษณะดังนี้:

$servername = "mysql.hostinger.com"; $ฐานข้อมูล = "u266072517_name"; $ชื่อผู้ใช้ = "u266072517_user"; $password = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = ; // สร้างการเชื่อมต่อใหม่ไปยังฐานข้อมูล MySQL โดยใช้ PDO, $my_Db_Connection เป็นวัตถุลอง ( $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "เชื่อมต่อเรียบร้อยแล้ว"; ) catch (PDOException $ ข้อผิดพลาด) ( เสียงก้อง " ข้อผิดพลาดในการเชื่อมต่อ: " . $error->getMessage(); ) // ตั้งค่าตัวแปรสำหรับบุคคลที่เราต้องการเพิ่มลงในฐานข้อมูล $first_Name = "Thom"; $last_Name = "Vial"; $email = " [ป้องกันอีเมล]"; // ที่นี่เราสร้างตัวแปรที่เรียกวิธีการเตรียม () ของวัตถุฐานข้อมูล // แบบสอบถาม SQL ที่คุณต้องการเรียกใช้จะถูกป้อนเป็นพารามิเตอร์และตัวยึดตำแหน่งจะถูกเขียนดังนี้: placeholder_name $my_Insert_Statement = $my_Db_Connection-> เตรียม("INSERT INTO Students (name, Lastname, email) VALUES (:first_name, :last_name, :email)"); // ตอนนี้เราบอกสคริปต์ว่าตัวแปรใดที่ตัวยึดตำแหน่งแต่ละตัวอ้างถึงจริง ๆ โดยใช้เมธอด bindParam() // First พารามิเตอร์คือตัวยึดตำแหน่งในคำสั่งด้านบน - พารามิเตอร์ตัวที่สองคือตัวแปรที่ควรอ้างถึง $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); , $email); // ดำเนินการค้นหาโดยใช้ข้อมูลที่เราเพิ่งกำหนด // วิธีการดำเนินการ () ส่งคืน TRUE หากสำเร็จและเป็น FALSE หากไม่สำเร็จ ทำให้คุณสามารถเขียนข้อความของคุณเองได้ที่นี่หาก ( $my_Insert_Statement-> ดำเนินการ()) ( echo "สร้างบันทึกใหม่เรียบร้อยแล้ว"; ) else ( echo "ไม่สามารถสร้างบันทึกได้"; ) // ณ จุดนี้ คุณสามารถเปลี่ยนข้อมูลของตัวแปรและดำเนินการอีกครั้งเพื่อเพิ่มข้อมูลลงในฐานข้อมูล $first_Name = "John"; $last_Name = "สมิธ"; $อีเมล์ = " [ป้องกันอีเมล]"; $my_Insert_Statement->execute(); // ดำเนินการอีกครั้งเมื่อตัวแปรมีการเปลี่ยนแปลงถ้า ($my_Insert_Statement->execute()) ( echo "สร้างบันทึกใหม่เรียบร้อยแล้ว"; ) else ( echo "ไม่สามารถสร้างบันทึกได้"; )

ในบรรทัดที่ 28, 29 และ 30 เราใช้วิธีนี้ ผูกพารามิเตอร์()วัตถุฐานข้อมูล นอกจากนี้ยังมีวิธีการ ผูกค่า()แตกต่างจากครั้งก่อน

  • ผูกพารามิเตอร์() –วิธีการนี้จะนับข้อมูลเมื่อวิธีการ ดำเนินการ()ประสบความสำเร็จ ครั้งแรกที่สคริปต์เข้าถึงเมธอด ดำเนินการ()เขาเห็นสิ่งนั้น $first_Nameอ้างอิงถึง “Thom” ผูกค่านั้นและดำเนินการค้นหา เมื่อสคริปต์มาถึงวิธีการครั้งที่สอง ดำเนินการ()เขามองอย่างนั้น $first_Nameตอนนี้อ้างอิงถึง “John” ผูกค่านั้นและเรียกใช้แบบสอบถามอีกครั้งด้วยค่าใหม่ สิ่งสำคัญคือต้องเข้าใจว่าเราสร้างคำขอเพียงครั้งเดียว จากนั้นจึงแทนที่ข้อมูลที่แตกต่างกันในตำแหน่งต่างๆ ในสคริปต์
  • ผูกค่า() –วิธีนี้จะคำนวณข้อมูลทันทีที่ถึงตา เนื่องจากมีความคุ้มค่า $first_Nameตั้งเป็น “ทอม” ตอนเราไปถึงวิธี ผูกค่า()จะใช้เมื่อเรียกเมธอด ดำเนินการ()สำหรับ $my_Insert_Statement.

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

หากคุณเปลี่ยนสคริปต์ของคุณโดยการแทนที่ ผูกพารามิเตอร์บน ผูกค่าคุณจะเพิ่มเข้าไป ฐานข้อมูล MySQL“Thom Vial” สองครั้งในฐานข้อมูล และ John Smith จะถูกเพิกเฉย

ขั้นตอนที่ 3 - ตรวจสอบความสำเร็จและแก้ไขปัญหาทั่วไป

หากการสืบค้นที่เรารันในฐานข้อมูล MySQL สำเร็จ เราจะเห็นข้อความต่อไปนี้:

การแก้ไขข้อผิดพลาดทั่วไป

MySQLi

ในกรณีอื่นใด ข้อความแสดงข้อผิดพลาดจะแสดงแทนข้อความข้างต้น ตัวอย่างเช่น เรามาสร้างข้อผิดพลาดทางไวยากรณ์อย่างหนึ่งในโค้ดของเรา แล้วเราจะได้สิ่งนี้:

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

"ข้อผิดพลาด: INSERT INTO นักเรียน (ชื่อ นามสกุล อีเมล) ค่า ("Thom", "Vial", " [ป้องกันอีเมล]") คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณเพื่อหาไวยากรณ์ที่ถูกต้องที่จะใช้ใกล้กับ "(ชื่อ นามสกุล อีเมล) VALUES ("Thom", "Vial", " [ป้องกันอีเมล]")" ที่บรรทัด 1"

มีข้อผิดพลาดทางไวยากรณ์ที่ทำให้สคริปต์ของเราล้มเหลว ข้อผิดพลาดอยู่ที่นี่:

$sql = "INSERT INTO นักเรียน (ชื่อ นามสกุล อีเมล) ค่า ("Thom", "Vial", " [ป้องกันอีเมล]")";

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

สปส

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

ข้อผิดพลาดร้ายแรง: ข้อยกเว้นที่ไม่ได้รับการตรวจสอบ "PDOException" พร้อมข้อความ "SQLSTATE: ข้อผิดพลาดทางไวยากรณ์หรือการละเมิดการเข้าถึง: 1064 คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ; ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณเพื่อหาไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ "(ชื่อ, นามสกุล, อีเมล) VALUES ("Thom", "Vial", " [ป้องกันอีเมล]")" ที่บรรทัด 1"

ปัญหาอื่น ๆ ที่คุณอาจพบ:

  • ระบุฟิลด์ไม่ถูกต้อง (ไม่มีฟิลด์หรือชื่อสะกดผิด)
  • ประเภทค่าไม่ตรงกับประเภทฟิลด์ เช่น เมื่อเราต้องการกำหนดค่าของตัวเลข 47 สนาม ชื่อเราจะได้รับข้อผิดพลาดเนื่องจากค่าที่คาดว่าจะเป็นสตริง แต่ถ้าคุณระบุตัวเลขในเครื่องหมายคำพูด เช่น “47” จะไม่มีข้อผิดพลาดเพราะหมายเลขของเราจะถูกเขียนเป็นสตริงในช่องนี้
  • ความพยายามที่จะป้อนข้อมูลลงในตารางที่ไม่มีอยู่หรือมีข้อผิดพลาดในการสะกดชื่อตาราง

ข้อผิดพลาดทั้งหมดนี้สามารถแก้ไขได้โดยทำตามคำแนะนำในการแก้ไขข้อผิดพลาดหรือโดยการตรวจสอบบันทึกข้อผิดพลาด

หลังจากเพิ่มข้อมูลสำเร็จแล้ว เราควรเห็นข้อมูลนั้นในฐานข้อมูลของเรา นี่คือตัวอย่างของตารางที่เราเพิ่มข้อมูลลงไป phpMyAdmin.

บทสรุป

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

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

การเพิ่มรายการโดยใช้ phpMyAdmin

เชลล์ phpMyAdmin สำหรับการจัดการ MySQL DBMS ใช้ฟังก์ชันการเพิ่มแบบ "น้ำหนักเบา" รายการใหม่ลงในตารางฐานข้อมูล เนื่องจากความเรียบง่าย จึงเหมาะสำหรับทั้งมืออาชีพที่เป็น "หุ่นเชิด" และ "ขี้เกียจ"

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

หลังจากนี้ หากต้องการสร้างบันทึกในฐานข้อมูล MySQL ให้กรอกข้อมูลในช่อง "ค่า" ของคอลัมน์ทั้งหมดในหน้าต่างถัดไป แล้วคลิก "ตกลง" ที่ด้านล่าง

ในภาพหน้าจอด้านบน คุณจะเห็นว่าตาราง "สัตว์" ที่กำลังแก้ไขประกอบด้วยสองคอลัมน์ (ฟิลด์): รหัสและชื่อ ส่วนที่สองระบุประเภทของแต่ละคอลัมน์ เราจำเป็นต้องป้อนค่าสำหรับฟิลด์ชื่อเท่านั้น เนื่องจากคอลัมน์ id เป็นคีย์หลักและถูกกำหนดให้เพิ่มอัตโนมัติเมื่อสร้างตาราง ซึ่งหมายความว่าค่าของฟิลด์ id จะถูกสร้างขึ้นโดยอัตโนมัติโดย MySQL โดยการเพิ่ม 1 เข้ากับค่าจำนวนเต็มก่อนหน้า

หากต้องการค้นหาว่าช่องข้อมูลใดใน MySQL ที่เป็นคีย์หลัก ใน phpMyAdmin ให้ไปที่เมนู (โดยเลือกตารางทางด้านซ้ายในรายการ) ไปที่แท็บ "โครงสร้าง" ของเมนูด้านบน นี่คือคำอธิบายของเขตข้อมูลตารางทั้งหมด ประเภท และคุณลักษณะเพิ่มเติม

การแทรกข้อมูลโดยใช้คำสั่ง SQL

แต่ phpMyAdmin เป็นเพียงเชลล์ และผู้ดูแลระบบที่แท้จริง “พูดคุย” กับเซิร์ฟเวอร์ MySQL โดยใช้ Structured Query Language นั่นคือพวกเขา "พูดคุย" กับเขาต่อไป ภาษา SQL- เนื่องจากเรามุ่งมั่นที่จะเป็นมืออาชีพที่แท้จริง เราจะเจาะลึกการศึกษาคำสั่ง SQL ภายในกรอบของหัวข้อที่กำลังพิจารณาเล็กน้อย นี่คือแบบสอบถามโดยป้อนว่าคุณจะสร้างฐานข้อมูลเดียวกันในฟิลด์ "SQL":

สร้างตารางสัตว์ (id MEDIUMINT ไม่เป็นโมฆะ AUTO_INCREMENT, ชื่อ CHAR (30) ไม่เป็นโมฆะ, คีย์หลัก (id));

สร้างตารางสัตว์ (id MEDIUMINT NOT NULL AUTO_INCREMENT ,

ชื่อ CHAR (30) ไม่เป็นโมฆะ, คีย์หลัก (id));

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

รหัสคำขอ:

แทรกลงใน `my_db1`.`animal` (`id`, `name`) ค่า (NULL, "Cat");

ใส่เข้าไปใน ` my_db1 ` ` สัตว์ ` ( ` id ` ` ชื่อ ` ) ค่า ( NULL , "แมว" ) ;

ลองศึกษารายละเอียดเพิ่มเติม ใน SQL คำสั่ง INSERT ใช้เพื่อแทรกแถวใหม่ลงในตาราง มันบอกเซิร์ฟเวอร์ว่าต้องแทรกค่าที่ระบุ (ค่า (NULL, 'Cat')) ลงในตารางฐานข้อมูล (my_db1 . animal) ในช่อง id และชื่อ

โปรดทราบว่าเราไม่ได้ระบุค่าตัวเลขสำหรับคอลัมน์ id แต่เป็น NULL เนื่องจากเราได้ "เปิด" ป้อนอัตโนมัติ (เพิ่มค่าอัตโนมัติ) สำหรับฟิลด์นี้

วิธีแทรกบันทึกโดยใช้ PHP

ทุกสิ่งที่เราพิจารณาเป็นเพียง "โหมโรง" ของการกระทำหลักซึ่ง "ฝ่าบาท" ภาษาเซิร์ฟเวอร์เข้ามาบนเวที การเขียนโปรแกรม PHP- ต้องขอบคุณเขาที่ MySQL ในฐานะ DBMS เริ่มแพร่หลายบนอินเทอร์เน็ต
อินเทอร์เน็ตส่วนใหญ่สร้างขึ้นจากการผสมผสานระหว่างเทคโนโลยีอินเทอร์เน็ตทั้งสองนี้ เวิลด์ไวด์เว็บ- ไม่ว่าคุณจะมองไปทางไหน คุณจะพบมันทุกที่: ใน CMS สมัยใหม่ เอ็นจิ้น "เขียนเอง" และบนเซิร์ฟเวอร์

ไม่น่าแปลกใจที่การเขียนข้อมูลลงไป MySQL PHPมีฟังก์ชันในตัวมากมาย แต่เราจะมุ่งเน้นไปที่สิ่งที่สำคัญที่สุด นี่คือโค้ดที่เพิ่ม "สัตว์" ใหม่ลงในตารางสัตว์ หากคุณพยายามมากพอ คุณสามารถรวบรวมโรงละครสัตว์ทั้งหมดได้ด้วยวิธีนี้ :)

$con_str=mysql_connect("localhost", "root", "", "db1");

if(mysql_connect("localhost","root"))( echo "Hello!!"; ) mysql_select_db("db1",$con_str);

$query_str="INSERT INTO `db1`.`animal` (`id`, `name`) ค่า (NULL, "สุนัข")";

mysql_query($query_str);

mysql_close();

$con_str = mysql_connect ("localhost" , "root" , "" , "db1" ) ; ถ้า (mysql_connect("localhost" , "root" ) ) (;

ก้อง "สวัสดี!!" -

mysql_select_db("db1", $con_str);

$query_str=

"ใส่เข้าไปในค่า `db1`.`animal` (`id`, `name`) (NULL, "dog")"

mysql_query($query_str); mysql_close();โค้ดนี้จะต้องวางลงในไฟล์ PHP และวางไว้ที่ฝั่งเซิร์ฟเวอร์

การใช้ฟังก์ชัน mysql_connect() เราเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล MySQL ฟังก์ชันนี้ใช้เป็นอาร์กิวเมนต์ของโฮสต์ ชื่อผู้ใช้ DBMS รหัสผ่าน และชื่อของฐานข้อมูลที่คุณต้องการเชื่อมต่อ เรามีรหัสผ่านว่างเนื่องจากเราใช้เซิร์ฟเวอร์ที่ติดตั้งบนเครื่อง (ไคลเอนต์) เพื่อสาธิตตัวอย่างการเขียนลงฐานข้อมูล MySQL ทั้งหมดที่อธิบายไว้ด้วยโดยใช้ PHP

เราใช้ "ชุดสุภาพบุรุษ" จากเดนเวอร์ ประกอบด้วยเซิร์ฟเวอร์ Apache ในเครื่อง, เซิร์ฟเวอร์ MySQL, phpMyAdmin และเครื่องมือที่มีประโยชน์อื่นๆ อีกมากมายสำหรับการสร้างและทดสอบโค้ดโปรแกรม จากนั้น ในตรรกะ if block เราได้ตรวจสอบการเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล หลังจากนั้นในฟังก์ชัน mysql_select_db() เราได้กำหนดฐานข้อมูลที่เราจะเชื่อมต่อ ด้วยการใช้ฟังก์ชัน mysql_query() เราได้เปิดตัวการสืบค้น SQL ที่บันทึกไว้ในตัวแปร $query_str และในที่สุดพวกเขาก็ปิดตัวลงการเชื่อมต่อที่จัดตั้งขึ้น

(ฟังก์ชัน mysql_close()) ทีนี้ ถ้าเราดูที่โรงเลี้ยงสัตว์ของเรา (โต๊ะสัตว์) เราจะพบ "สัตว์เลี้ยง" ตัวใหม่ที่นั่น

ในการเขียนลงใน MySQL นั้น PHP “กรุณา” ได้จัดเตรียมชุดฟังก์ชันที่จำเป็นทั้งหมดไว้ สิ่งสำคัญที่ผู้เริ่มต้นจะถูกเผาไหม้คือ

ในบทความนี้ เราจะดูวิธีใช้ PHP เพื่อแทรกแถวลงในฐานข้อมูล MySQL

ขั้นตอนที่ 1 - การสร้างตาราง

ขั้นแรกคุณต้องสร้างตารางสำหรับข้อมูล นี่เป็นขั้นตอนง่ายๆ ที่สามารถทำได้โดยใช้ phpMyAdmin ในแผงควบคุมโฮสติ้งของคุณ

หลังจากเข้าสู่ระบบ phpMyAdmin คุณจะเห็นอินเทอร์เฟซนี้:
มาสร้างตารางชื่อ Students ในฐานข้อมูล u266072517_name โดยคลิกที่ปุ่ม “Create Table” หลังจากนี้เราจะเห็นหน้าใหม่ซึ่งเราตั้งค่าพารามิเตอร์ตารางที่จำเป็นทั้งหมด:

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

ตัวเลือกคอลัมน์:

  • Name คือชื่อคอลัมน์ที่ปรากฏที่ด้านบนของตาราง
  • ประเภท — ประเภทคอลัมน์ ตัวอย่างเช่น เราเลือก varchar เนื่องจากเราจะป้อนค่าสตริง
  • ความยาว/ค่า - ใช้เพื่อระบุความยาวสูงสุดที่รายการในคอลัมน์นี้สามารถมีได้
  • ดัชนี - เราใช้ดัชนี "หลัก" สำหรับฟิลด์ "ID" เมื่อสร้างตาราง ขอแนะนำให้ใช้เพียงคอลัมน์เดียวเป็นคีย์หลัก ใช้เพื่อแสดงรายการบันทึกในตารางและจำเป็นเมื่อตั้งค่าตาราง ฉันยังได้สังเกต "A_I" ซึ่งหมายถึง "การเพิ่มอัตโนมัติ" - พารามิเตอร์สำหรับการกำหนดหมายเลขบันทึกโดยอัตโนมัติ (1,2,3,4...)
    คลิกปุ่ม "บันทึก" จากนั้นตารางจะถูกสร้างขึ้น

ขั้นตอนที่ 2: เขียนโค้ด PHP เพื่อแทรกข้อมูลลงใน MySQL

ตัวเลือกที่ 1 - วิธี MySQLi

ขั้นแรกคุณต้องสร้างการเชื่อมต่อกับฐานข้อมูล หลังจากนี้เราใช้แบบสอบถาม SQL INSERT ตัวอย่างโค้ดแบบเต็ม:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

ส่วนแรกของโค้ด (บรรทัดที่ 3 - 18) ได้รับการออกแบบมาเพื่อเชื่อมต่อกับฐานข้อมูล

เริ่มจากบรรทัดที่ 19:

$sql = "INSERT INTO นักเรียน (ชื่อ นามสกุล อีเมล) ค่า ("Thom", "Vial", " [ป้องกันอีเมล]")";

มันแทรกข้อมูลลงในฐานข้อมูล MySQL INSERT INTO เป็นคำสั่งที่เพิ่มข้อมูลลงในตารางที่ระบุ ในตัวอย่างของเรา ข้อมูลจะถูกเพิ่มลงในตารางนักเรียน

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

ส่วนถัดไปคือคำสั่ง VALUES ที่นี่เราระบุค่าสำหรับคอลัมน์: name = Thom, นามสกุล = Vial, email = [ป้องกันอีเมล].

เราดำเนินการคำขอโดยใช้โค้ด PHP ในโค้ดโปรแกรม การสืบค้น SQL จะต้องหลีกหนีด้วยเครื่องหมายคำพูด โค้ดชิ้นถัดไป (บรรทัด 20-22) ตรวจสอบว่าคำขอของเราสำเร็จหรือไม่:

if (mysqli_query($conn, $sql)) ( echo "บันทึกใหม่สร้างสำเร็จ"; )

รหัสนี้แสดงข้อความแจ้งว่าคำขอสำเร็จแล้ว

และส่วนสุดท้าย (บรรทัดที่ 22 - 24) จะแสดงการแจ้งเตือนหากคำขอไม่สำเร็จ:

อื่น ๆ ( echo "ข้อผิดพลาด: " . $sql . "
" . mysqli_error($conn); )

ตัวเลือก 2 - วิธี PHP Data Object (PDO)

ก่อนอื่นเราต้องเชื่อมต่อกับฐานข้อมูลโดยการสร้างวัตถุ PDO ใหม่ เมื่อทำงานกับมันเราจะใช้ วิธีการต่างๆสปส. วิธีการวัตถุถูกเรียกดังต่อไปนี้:

$the_Object->the_Method();

PDO อนุญาตให้คุณ "เตรียม" โค้ด SQL ก่อนที่จะดำเนินการ แบบสอบถาม SQL ได้รับการประเมินและ "แก้ไข" ก่อนที่จะรัน ตัวอย่างเช่น การโจมตีแบบแทรก SQL แบบง่ายๆ สามารถทำได้โดยเพียงแค่ป้อนโค้ด SQL ลงในฟิลด์แบบฟอร์ม ตัวอย่างเช่น:

เนื่องจากนี่เป็น SQL ที่ถูกต้องตามหลักไวยากรณ์ อัฒภาคจึงทำให้ DROP DATABASE user_table เป็นแบบสอบถาม SQL ใหม่และตารางผู้ใช้จึงถูกละทิ้ง นิพจน์ที่เตรียมไว้ (ตัวแปรที่ถูกผูกไว้) ไม่อนุญาตให้อัฒภาคและเครื่องหมายคำพูดยุติการสืบค้นดั้งเดิม ดังนั้นคำสั่ง DROP DATABASE จะไม่ดำเนินการ

ในการใช้นิพจน์ที่เตรียมไว้ คุณจะต้องเขียนตัวแปรใหม่ที่เรียกใช้เมธอด wait() ของออบเจ็กต์ฐานข้อมูล

รหัสที่ถูกต้อง:

รับข้อความ(); ) // ตั้งค่าตัวแปรให้กับบุคคลที่เราต้องการเพิ่มลงในฐานข้อมูล $first_Name = "Thom"; $last_Name = "ขวด"; $อีเมล์ = " [ป้องกันอีเมล]"; // สร้างตัวแปรที่เรียกวิธีการเตรียม () ของวัตถุฐานข้อมูล // แบบสอบถาม SQL ที่คุณต้องการเรียกใช้ถูกป้อนเป็นพารามิเตอร์และตัวยึดตำแหน่งจะถูกเขียนดังนี้: placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare(" INSERT INTO Students ( name, Lastname, email) VALUES (:first_name, :last_name, :email)"); // ตอนนี้เราบอกสคริปต์ว่าตัวแปรใดอ้างอิงถึงแต่ละ placeholder เพื่อใช้เมธอด bindParam() // พารามิเตอร์ตัวแรกคือ ตัวยึดตำแหน่งในคำสั่งด้านบน ตัวที่สองคือตัวแปรที่ควรอ้างอิง $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); // ดำเนินการค้นหาโดยใช้ข้อมูลที่เรา เพิ่งกำหนด // วิธีการดำเนินการ () คืนค่า TRUE หากสำเร็จและเป็น FALSE หากล้มเหลว ทำให้คุณมีตัวเลือกในการพิมพ์ข้อความ if ของคุณเอง ($my_Insert_Statement->execute()) ( echo "New recordcreatedsuccessfully"; ) else ( echo "Unable to createrecord"; ) // ณ จุดนี้ คุณสามารถเปลี่ยนข้อมูลตัวแปรและเรียกใช้แบบสอบถามเพื่อเพิ่มข้อมูลลงในฐานข้อมูลไปยังฐานข้อมูล $first_Name = "John"; $last_Name = "สมิธ"; $อีเมล์ = " [ป้องกันอีเมล]"; $my_Insert_Statement->execute(); // ดำเนินการอีกครั้งเมื่อตัวแปรมีการเปลี่ยนแปลงถ้า ($my_Insert_Statement->execute()) ( echo "New recordcreatedsuccessfully"; ) else ( echo "ไม่สามารถ createrecord";

ในบรรทัดที่ 28, 29 และ 30 เราใช้เมธอดbindParam() ของอ็อบเจ็กต์ฐานข้อมูล นอกจากนี้ยังมีวิธีbindValue() ซึ่งแตกต่างจากวิธีก่อนหน้ามาก

  • bindParam() - เมธอดนี้จะประเมินข้อมูลเมื่อถึงวิธีดำเนินการ () ครั้งแรกที่สคริปต์เข้าถึงเมธอดดำเนินการ () จะเห็นว่า $first_Name ตรงกับ "Thom" จากนั้นผูกค่านี้และรันคำขอ เมื่อสคริปต์ไปถึงวิธีดำเนินการที่สอง () จะเห็นว่าตอนนี้ $first_Name ตรงกับ "John" จากนั้นจะผูกค่านี้และเรียกใช้แบบสอบถามอีกครั้งด้วยค่าใหม่ สิ่งสำคัญคือต้องจำไว้ว่าเราได้กำหนดการสืบค้นเพียงครั้งเดียวและนำมาใช้ซ้ำกับข้อมูลที่แตกต่างกัน ณ จุดต่างๆ ในสคริปต์
  • bindValue() - เมธอดนี้จะประเมินข้อมูลเมื่อถึงbindValue() เนื่องจาก $first_Name ถูกตั้งค่าเป็น "Thom" เมื่อถึงbindValue() มันจะถูกใช้ทุกครั้งที่เรียกใช้เมธอดดำเนินการ () บน $my_Insert_Statement
    โปรดสังเกตว่าเรากำลังใช้ตัวแปร $first_Name ซ้ำและกำหนดค่าใหม่เป็นครั้งที่สอง หลังจากรันสคริปต์แล้ว ทั้งสองชื่อจะถูกระบุในฐานข้อมูล แม้ว่าตัวแปร $first_Name ที่ท้ายสคริปต์จะมีค่าเป็น "John" ก็ตาม โปรดจำไว้ว่า PHP จะตรวจสอบสคริปต์ทั้งหมดก่อนที่จะรัน

หากคุณอัปเดตสคริปต์เพื่อแทนที่bindParamด้วยbindValue คุณจะแทรก "Thom Vial" ลงในฐานข้อมูลสองครั้ง และ John Smith จะถูกละเว้น

ขั้นตอนที่ 3 - ยืนยันความสำเร็จและแก้ไขปัญหา

หากคำขอแทรกแถวลงในฐานข้อมูลสำเร็จ เราจะเห็นข้อความต่อไปนี้:

การแก้ไขปัญหาข้อผิดพลาดทั่วไป

MySQLi

ในกรณีอื่นใด ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น ตัวอย่างเช่น เรามาสร้างข้อผิดพลาดทางไวยากรณ์อย่างหนึ่งในโค้ด แล้วเราจะได้สิ่งต่อไปนี้:

ส่วนแรกของโค้ดก็โอเค สร้างการเชื่อมต่อสำเร็จแล้ว แต่การสืบค้น SQL ล้มเหลว

"ข้อผิดพลาด: INSERT INTO นักเรียน (ชื่อ นามสกุล อีเมล) ค่า ("Thom", "Vial", " [ป้องกันอีเมล]") คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณเพื่อดูไวยากรณ์สิทธิ์ที่จะใช้ใกล้กับ "(ชื่อ นามสกุล อีเมล) VALUES ("Thom", "Vial", " [ป้องกันอีเมล]")" ที่บรรทัด 1"

มีข้อผิดพลาดทางไวยากรณ์ที่ทำให้สคริปต์ขัดข้อง ข้อผิดพลาดอยู่ที่นี่:

$sql = "INSERT INTO นักเรียน (ชื่อ นามสกุล อีเมล) ค่า ("Thom", "Vial", " [ป้องกันอีเมล]")";

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

สปส

บรรทัดที่ 7 ของการเชื่อมต่อ PDO ตั้งค่าโหมดข้อผิดพลาดเป็น "แสดงข้อยกเว้นทั้งหมด" หากตั้งค่าเป็นค่าอื่นและคำขอล้มเหลว เราจะไม่ได้รับข้อความแสดงข้อผิดพลาดใดๆ

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

ข้อผิดพลาดร้ายแรง: UncaughtExceptionion "PDOException" พร้อมข้อความ "SQLSTATE: ข้อผิดพลาดทางไวยากรณ์หรือการละเมิดการเข้าถึง: 1064 คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณเพื่อหาไวยากรณ์สิทธิ์ที่จะใช้ใกล้กับ "(ชื่อ, นามสกุล, อีเมล) VALUES ("Thom", "Vial", " [ป้องกันอีเมล]")" ที่บรรทัด 1"

ปัญหาที่เป็นไปได้อื่น ๆ :

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

หลังจากป้อนข้อมูลเรียบร้อยแล้วเราจะเห็นว่าได้มีการเพิ่มลงในฐานข้อมูลแล้ว ด้านล่างนี้เป็นตัวอย่างของตารางที่มีการเพิ่มข้อมูล

บทสรุป

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

เอกสารฉบับนี้เป็นการแปลบทความ “ วิธีใช้ PHP เพื่อแทรกข้อมูลลงในฐานข้อมูล MySQL"จัดทำโดยทีมงานโครงการที่เป็นมิตร

ในบทช่วยสอนนี้ เราจะดูวิธีแทรกข้อมูลลงในฐานข้อมูลโดยตรงจากสคริปต์ PHP ของคุณ

การแทรกข้อมูลโดยใช้ SQL

คุณใช้ SQL เพื่อแทรกข้อมูลลงในฐานข้อมูลในลักษณะเดียวกับที่คุณใช้ SQL เพื่อสร้างฐานข้อมูลและตาราง ไวยากรณ์แบบสอบถาม SQL คือ:

แทรกลงในชื่อตาราง (คอลัมน์ 1 คอลัมน์ 2, ...) ค่า(value1,ค่า 2, ...)

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

ตัวอย่าง: การแทรกบุคคลใหม่ลงในตาราง

ในตัวอย่างนี้ เราใช้ฐานข้อมูลจากบทที่ 18 สมมติว่าเราต้องการแทรกบุคคลลงในฐานข้อมูล มันอาจจะเป็นเช่นนั้น กัส กูสพร้อมหมายเลขโทรศัพท์ 99887766 และวันเกิด 1964-04-20 .

คำสั่ง SQL อาจมีลักษณะดังนี้:

$strSQL = "ใส่บุคคล(ชื่อ,นามสกุล,โทรศัพท์,วันเกิด) ค่า("Gus","Goose","99887766 ","1964-04-20"");

อย่างที่คุณเห็น คำสั่ง SQL อาจจะค่อนข้างยาว และอาจหลงทางได้ง่าย ดังนั้นจึงเป็นการดีกว่าถ้าเขียนคำสั่ง SQL ให้แตกต่างออกไปเล็กน้อย:

strSQL = "ใส่คนเข้าไป("; strSQL = strSQL "ชื่อ"; strSQL = strSQL "นามสกุล" strSQL = strSQL "โทรศัพท์," strSQL = strSQL "การเกิด)"; strSQL = strSQL "ค่า ("; strSQL = strSQL . ""กัส", "; strSQL = strSQL ""ห่าน", "; strSQL = strSQL ""99887766", "; strSQL = strSQL ""1964-04-20""); mysql_query($strSQL) หรือ die(mysql_error());

ในที่นี้คำสั่ง SQL ถูกสร้างขึ้นโดยการแบ่งประโยคออกเป็นส่วนเล็กๆ แล้วรวมเข้าด้วยกันเป็นตัวแปร $strSQL.

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

ลองใช้โค้ดต่อไปนี้เพื่อแทรก Gus Goose ลงในฐานข้อมูล:

การแทรกข้อมูลลงในฐานข้อมูล // การเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล mysql_connect("mysql.myhost.com", "user", "sesame") หรือตาย (mysql_error());// เลือกฐานข้อมูล mysql_select_db("mydatabase") หรือ die(mysql_error()); //สร้างคำสั่ง SQL $strSQL = "ใส่คนเข้าไป("; $strSQL = $strSQL "ชื่อ"; $strSQL = $strSQL "นามสกุล"; $strSQL = $strSQL "โทรศัพท์," $strSQL = $strSQL "วันเกิด"; $strSQL = $strSQL "ค่า("; $strSQL = $strSQL ""กัส", "; $strSQL = $strSQL ""ห่าน", "; $strSQL = $strSQL ""99887766", "; $strSQL = $strSQL ""1964-04-20""); // คำสั่ง SQL ถูกดำเนินการ mysql_query($strSQL) หรือตาย (mysql_error()); //ปิดการเชื่อมต่อ mysql_close();

-

ดีบีอัปเดตแล้ว!

บันทึกอินพุตของผู้ใช้ลงในฐานข้อมูล

สมมติว่าคุณมีรูปแบบง่ายๆ: บันทึกแบบฟอร์มนี้ถูกส่งไปยังไฟล์

ใส่.php

โดยที่คุณดังที่แสดงในบทที่ 11 สามารถรับข้อมูลของผู้ใช้โดยการขอเนื้อหาของแบบฟอร์ม ในกรณีนี้ คำสั่ง SQL อาจเป็นดังนี้:

strSQL = "ใส่ค่าบุคคล (ชื่อ) ("" . $_POST["FirstName"] . "")"

ในทำนองเดียวกัน คุณสามารถขอข้อมูลจากคุกกี้ เซสชันสตริงการสืบค้น ฯลฯ

ข้อผิดพลาดเริ่มต้นที่พบบ่อยที่สุด

ในตอนแรก คุณอาจได้รับข้อความแสดงข้อผิดพลาดมากมายเมื่อคุณพยายามอัปเดตฐานข้อมูล เมื่อทำงานกับฐานข้อมูลจะไม่อนุญาตให้มีข้อผิดพลาดใดๆ เลย เครื่องหมายจุลภาคไม่ถูกต้องอาจหมายความว่าฐานข้อมูลไม่ได้รับการอัพเดต และคุณจะได้รับข้อความแสดงข้อผิดพลาด ด้านล่างนี้เราจะอธิบายข้อผิดพลาดที่พบบ่อยที่สุด

ประเภทข้อมูลไม่ถูกต้อง

สิ่งสำคัญคือข้อมูลและประเภทข้อมูลของคอลัมน์ต้องตรงกัน แต่ละคอลัมน์สามารถมีข้อมูลบางประเภทได้

ภาพหน้าจอต่อไปนี้แสดงประเภทข้อมูลของตาราง "บุคคล" จากตัวอย่างของเรา ข้อผิดพลาดจะเกิดขึ้นหากคุณพยายามแทรกข้อความหรือตัวเลขลงในช่องข้อมูล ดังนั้นควรตั้งค่าประเภทข้อมูลให้แม่นยำที่สุด ประเภทข้อมูลที่พบบ่อยที่สุดมีดังต่อไปนี้:
ความหมาย
ประเภทข้อมูล ขนาด
ช.ร
ข้อความหรือการรวมกันของข้อความและตัวเลข ยังสามารถใช้กับตัวเลขที่ไม่ได้ใช้ในการคำนวณ (เช่น หมายเลขโทรศัพท์) สูงสุด 255 อักขระ - หรือความยาวที่ระบุใน "ความยาว"
ข้อความ
บล็อกข้อความขนาดใหญ่หรือข้อความและตัวเลขผสมกัน สูงสุด 65,535 อักขระ
อินเตอร์เนชั่นแนล
ข้อมูลตัวเลขสำหรับการคำนวณทางคณิตศาสตร์ 4 ไบต์
วันที่
วันที่ในรูปแบบ ปปปป-ดด-วว 4 ไบต์
3 ไบต์
เวลา 8 ไบต์

คำสั่ง SQL ที่มีเครื่องหมายคำพูดหรือแบ็กสแลช

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