ฉันต้องใช้การเตรียม wpdb ก่อนที่จะแทรก wpdb-> หรือไม่
หากฉันกำลังแทรกค่าลงในตาราง wordpress โดยใช้ wpdb-> insert ฉันต้อง "ล้าง" ข้อมูลของฉันก่อนที่จะแทรกมันหรือวิธีนี้ (wpdb-> insert) ทำเพื่อฉันหรือไม่
ฉันต้องใช้การเตรียม wpdb ก่อนที่จะแทรก wpdb-> หรือไม่
หากฉันกำลังแทรกค่าลงในตาราง wordpress โดยใช้ wpdb-> insert ฉันต้อง "ล้าง" ข้อมูลของฉันก่อนที่จะแทรกมันหรือวิธีนี้ (wpdb-> insert) ทำเพื่อฉันหรือไม่
คำตอบ:
ไม่คุณไม่ควรเตรียมหรือหลบหนีข้อมูลซึ่งจะทำโดยคุณในwpdb
ชั้นเรียน
จากการอ้างอิงคลาส wpdb :
ข้อมูล :
(อาร์เรย์) ข้อมูลที่จะแทรก (ในคอลัมน์ => คู่ของค่า) ทั้งคอลัมน์ข้อมูล $ และค่าข้อมูล $ ควรเป็น "ข้อมูลดิบ" (ไม่ควรหลีกเลี่ยง SQL)
แต่ถ้าคุณกำลังเขียน SQL ของคุณเองแทนที่จะใช้วิธีการแล้วใช่คุณควรจะใช้หลบหนีinsert
prepare
ต่อไปนี้เป็นคำเตือนสำหรับคลาส wpdb
https://codex.wordpress.org/Class_Reference/wpdb
คำเตือน
ฟังก์ชันบางอย่างในคลาสนี้ใช้คำสั่ง SQL เป็นอินพุต คุณต้อง SQL หลีกเลี่ยงค่าที่ไม่น่าเชื่อถือทั้งหมดที่คุณรวมไว้ในแบบสอบถาม SQL เพื่อป้องกันการโจมตีการฉีด SQL ตรวจสอบเอกสารประกอบเพื่อดูว่าฟังก์ชั่นที่คุณวางแผนจะใช้ Escape ของ SQL สำหรับคุณหรือไม่
ดังนั้นฉันจึงอ่านสิ่งนี้ - คลาส wpdb ไม่ได้จัดเตรียมหรือหลีกเลี่ยงข้อมูลโดยอัตโนมัติสำหรับคุณ
ฉันค่อนข้างแน่ใจว่าถ้าคุณไม่สามารถเชื่อถือแหล่งข้อมูล 100% ในรหัสของคุณได้ฉันขอแนะนำให้ใช้คลาสเตรียม (?)
อย่าคิดว่าการใช้คลาสเตรียมจะแก้ไขได้โดยไม่ใช้คลาสเตรียมอย่างถูกต้อง ฉันค่อนข้างใหม่สำหรับเรื่องนี้ดังนั้นโปรดโพสต์การแก้ไขใด ๆ เป็นการตอบกลับหากฉันไม่ถูกต้อง
$ wpdb-> เตรียมพร้อม ("เลือก * จากตาราง WHERE ID =% d และชื่อ =% s", $ id, $ name);
ในข้อความข้างต้นมี 2 แอตทริบิวต์พิเศษ หนึ่งรายการสำหรับ ID และอีกรายการสำหรับชื่อ เท่าที่ฉันอ่านแต่ละคนจะตอบสนองตามจำนวนรายการในแบบสอบถามของคุณ ยัง% s = สตริง,% d = จำนวนเต็มและ% f = ลอย
นอกจากนี้จากการอ่านของฉันถ้าคุณไม่ใส่คุณสมบัติพิเศษไว้การเตรียมตัวจะไม่ทำอะไรเลย จะมีคำเตือน แต่ถ้าคุณปิดมันไปบางทีคุณอาจไม่รู้
นี่คือตัวอย่างจากการอ้างอิงคลาสเองที่พวกเขาเพิ่มคลาสการเตรียมการลงใน INSERT ด้านล่าง
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$ wpdb-> คิวรี ($ wpdb-> เตรียมพร้อม ("INSERT INTO $ wpdb-> postmeta (post_id, meta_key, meta_value) ค่า (% d,% s,% s)" อาร์เรย์ (10, $ metakey, $ metavalue) ));
ความกังวลของฉันคือคำตอบที่ upvoted ไม่ถูกต้องตามหน้าเดียวกับที่ไม่มีใครอ้างอิง ฉันสมมติว่าคุณใช้เตรียมตัว () แต่ไม่ใช่วิธี php มาตรฐานอื่นของการหลบหนีเพราะฉันเอาคำตอบนี้ถูกต้องเช่นกัน ... จนกว่าฉันจะขุดลึกลงไป
อย่างไรก็ตาม ... บางทีสิ่งต่าง ๆ มีการเปลี่ยนแปลงตั้งแต่คำตอบเดิม
$wpdb->insert()
$ wpdb-> update () `หรือ$wpdb->delete()
ข้อมูลควรเป็น RAW ในสถานการณ์ที่คุณใช้เช่น$wpdb->query()
และส่งคำสั่ง SQL เป็นอินพุตคุณควรหลีกเลี่ยงข้อมูลที่ไม่น่าเชื่อถือ
ไม่คุณไม่จำเป็นต้องป้องกันการแทรก SQL เมื่อคุณใช้ - wpdb insert หรือ wpdb delete
ดูลิงค์ต่อไปนี้:
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
insert
&update
ไม่จำเป็นต้องใช้query
แต่มันควรจะใช้กับ