Score:0

การสนับสนุนมรดกของ Mariadb

ธง cn

ฉันมีไซต์ php เวอร์ชันเก่าซึ่งใช้หมายเลขคอลัมน์ 'row_number' ที่ไม่ใช้ค่า Escape ในการสืบค้น sql ดูเหมือนว่าใน mariadb เวอร์ชันใหม่จะมีการเพิ่มฟังก์ชันใหม่ที่เรียกว่า "row_number()" และทำให้การสืบค้นล้มเหลว ในการปรับโครงสร้างใหม่ทั้งโครงการนั้นเป็นไปไม่ได้ นอกจากนี้ฉันไม่ต้องการเทียบท่าทั้งหมดกับ mariadb เวอร์ชันเก่า มีวิธีใช้ mariadb ใหม่ แต่ยังใช้ชุดไวยากรณ์ / ฟังก์ชันที่เก่ากว่าเพื่อไม่ให้เกิดการชนกันหรือไม่

ขอบคุณ.

ua flag
ฉันคิดว่าคุณต้องกัดกระสุนและแก้ไขไฟล์ทั้งหมด หากคุณใช้ Linux คุณสามารถเขียนสคริปต์ `sed` (ฉันคิดว่าเป็นบรรทัดเดียว) เพื่อแก้ไขทั้งหมดในคำสั่งเดียว (ฉันไม่รู้จักเครื่องมือที่เทียบเท่าบน Windows)
Score:1
ธง cn

วิธีหนึ่งในการแก้ไขปัญหาเหล่านี้คือการใช้ ตัวกรองนิพจน์ทั่วไป ใน MariaDB MaxScale หากคุณรู้ว่าแอปพลิเคชันใช้ ROW_NUMBER ด้วยวิธีใดวิธีหนึ่งโดยเฉพาะ คุณสามารถกำหนดนิพจน์ทั่วไปที่ตรงกับนิพจน์นั้นและแทนที่ด้วยเวอร์ชันที่ยกมา

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

ต่อไปนี้คือตัวอย่างการกำหนดค่าตัวกรอง:

[ตัวกรอง Regex]
พิมพ์ = ตัวกรอง
โมดูล = ตัวกรอง regex
จับคู่=/ROW_NUMBER/
แทนที่=/`ROW_NUMBER`/
Score:1
ธง ua

ใน Linux (หรือคล้ายกัน) คำสั่งเดียวสามารถเพิ่ม backtics ในไฟล์ทั้งหมดของคุณได้

ข้อควรระวัง: อย่าใช้สิ่งนี้โดยไม่ทำการทดสอบอย่างละเอียดก่อน:

sed -i 's/row_number/\`row_number\`/ig *

หมายเหตุ:

-i - อัปเดตไฟล์ในสถานที่
\ -- จำเป็นต้องหลีกเลี่ยง backtics ที่ถูกกระทำโดยเชลล์
ฉัน -- ละเว้นกรณี
g - จัดการหลายเหตุการณ์ในบรรทัด
* -- เปลี่ยนเพื่อระบุไฟล์ที่อาจต้องแก้ไข
cn flag
การเพิ่มเครื่องหมายคำพูดนั้นอันตรายกว่าการเปลี่ยนชื่อคอลัมน์และตัวแปร แม้ว่าจะเป็นงานที่ค่อนข้างยุ่งยากก็ตาม นอกจากนี้ sed ไม่เหมาะกับงานนี้อย่างแน่นอน ฉันขอแนะนำ vscode และฟังก์ชันแทนที่ - หากใครสนใจแนวทางดังกล่าว อย่างไรก็ตาม ฉันไม่คิดว่าฉันอยากจะไปทางนั้น - อย่างน้อยก็ในตอนนี้ หากไม่มีเลเยอร์ที่เข้ากันได้สำหรับ mariadb ฉันอาจพิจารณา
Score:0
ธง cn

นอกจากนี้ฉันไม่ต้องการเทียบท่าทั้งหมดกับเวอร์ชันที่เก่ากว่า มาเรียด

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

มีวิธีใช้ mariadb ใหม่ แต่ใช้ไวยากรณ์/ฟังก์ชันที่เก่ากว่าด้วยหรือไม่ ตั้งให้ไม่มีการชนกัน?

ไม่ row_number เป็นฟังก์ชันหน้าต่างที่ มีอยู่ใน MariaDB เวอร์ชันที่รองรับทั้งหมด. โชคไม่ดีที่คุณเลือกชื่อก่อน แต่ row_number เป็นแบบแผนระหว่างการใช้งาน SQL

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

ua flag
และถ้าไม่ใช่ "row_number" ก็อาจเป็นอย่างอื่น และเวอร์ชันถัดไปจะใช้ชื่ออื่นที่คุณอาจใช้อยู่

โพสต์คำตอบ

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