wpdb-> insert: ฉันต้องเตรียมการฉีด SQL หรือไม่?


14

ฉันต้องใช้การเตรียม wpdb ก่อนที่จะแทรก wpdb-> หรือไม่

หากฉันกำลังแทรกค่าลงในตาราง wordpress โดยใช้ wpdb-> insert ฉันต้อง "ล้าง" ข้อมูลของฉันก่อนที่จะแทรกมันหรือวิธีนี้ (wpdb-> insert) ทำเพื่อฉันหรือไม่

คำตอบ:


21

ไม่คุณไม่ควรเตรียมหรือหลบหนีข้อมูลซึ่งจะทำโดยคุณในwpdbชั้นเรียน

จากการอ้างอิงคลาส wpdb :

ข้อมูล :

(อาร์เรย์) ข้อมูลที่จะแทรก (ในคอลัมน์ => คู่ของค่า) ทั้งคอลัมน์ข้อมูล $ และค่าข้อมูล $ ควรเป็น "ข้อมูลดิบ" (ไม่ควรหลีกเลี่ยง SQL)

แต่ถ้าคุณกำลังเขียน SQL ของคุณเองแทนที่จะใช้วิธีการแล้วใช่คุณควรจะใช้หลบหนีinsertprepare


8
ในการเพิ่มบันทึก: ทั้งinsert& updateไม่จำเป็นต้องใช้ queryแต่มันควรจะใช้กับ
ไกเซอร์

1

ต่อไปนี้เป็นคำเตือนสำหรับคลาส 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 มาตรฐานอื่นของการหลบหนีเพราะฉันเอาคำตอบนี้ถูกต้องเช่นกัน ... จนกว่าฉันจะขุดลึกลงไป

อย่างไรก็ตาม ... บางทีสิ่งต่าง ๆ มีการเปลี่ยนแปลงตั้งแต่คำตอบเดิม


hmmm ฟังดูเหมือนคำถามมากกว่าคำตอบ
Mark Kaplun

คำตอบที่ยอมรับนั้นถูกต้อง เมื่อคุณใช้ฟังก์ชั่นเช่น$wpdb->insert()$ wpdb-> update () `หรือ$wpdb->delete()ข้อมูลควรเป็น RAW ในสถานการณ์ที่คุณใช้เช่น$wpdb->query()และส่งคำสั่ง SQL เป็นอินพุตคุณควรหลีกเลี่ยงข้อมูลที่ไม่น่าเชื่อถือ
nmr

ไม่ฉันคิดว่าฉันเข้าใจแล้ว ดังนั้นเพื่อชี้แจง ... สำหรับสติของฉัน ... สิ่งที่คุณใช้เป็นตัวอย่างคือ 'วิธีการแทรกและ' วิธีการลบ 'ซึ่งตรงข้ามกับตัวอย่างที่ฉันใช้ในการใช้' วิธีการสืบค้น '... (% wpdb -> แบบสอบถาม) ฉันจะลบคำตอบของฉัน? หรือทิ้งมันไว้?
เฟลิเซียส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.