เอกสาร MySQL\'
บอกว่ามันควรจะเป็น อย่างไรก็ตามทั้ง scite และ mysql แสดงให้เห็นว่าใช้''
งานได้ ฉันเห็นสิ่งนั้นและมันใช้งานได้ ฉันควรทำอย่างไรดี?
\'
เป็น MySQL เฉพาะในขณะที่''
เป็นไปตามมาตรฐาน ANSI SQL ถ้าฉันไม่ผิด
เอกสาร MySQL\'
บอกว่ามันควรจะเป็น อย่างไรก็ตามทั้ง scite และ mysql แสดงให้เห็นว่าใช้''
งานได้ ฉันเห็นสิ่งนั้นและมันใช้งานได้ ฉันควรทำอย่างไรดี?
\'
เป็น MySQL เฉพาะในขณะที่''
เป็นไปตามมาตรฐาน ANSI SQL ถ้าฉันไม่ผิด
คำตอบ:
เอกสาร MySQL ที่คุณอ้างถึงจริง ๆ แล้วพูดมากกว่าที่คุณพูดถึง มันยังบอกว่า
“
'
” ภายในสตริงที่ยกมาด้วย“'
” อาจเขียนเป็น“''
”
(นอกจากนี้คุณเชื่อมโยงไปยังMySQL เวอร์ชัน 5.0 ของตารางที่ 8.1 ตัวละครพิเศษ Escape Sequencesและเวอร์ชันปัจจุบันคือ 5.6 - แต่ตารางที่ 8.1ในปัจจุบันตัวละครพิเศษ Escape Sequencesดูคล้ายกันมาก)
ฉันคิดว่าบันทึก Postgres ในbackslash_quote (string)
พารามิเตอร์เป็นข้อมูล:
สิ่งนี้จะควบคุมว่าเครื่องหมายคำพูดสามารถแสดงด้วย
\'
ตัวอักษรในสตริงได้หรือไม่ วิธีมาตรฐาน SQL ที่ต้องการเพื่อแสดงเครื่องหมายคำพูดคือการเพิ่มขึ้นสองเท่า (''
) แต่ PostgreSQL ได้รับการยอมรับในอดีต\'
ด้วย อย่างไรก็ตามการใช้\'
สร้างความเสี่ยงด้านความปลอดภัย ...
ที่บอกกับฉันว่าการใช้อักขระเครื่องหมายคำพูดเดี่ยวสองเท่าเป็นตัวเลือกโดยรวมและระยะยาวที่ดีกว่าการใช้เครื่องหมายทับขวาเพื่อหลบหนีเครื่องหมายคำพูดเดี่ยว
ตอนนี้ถ้าคุณต้องการเพิ่มทางเลือกของภาษาทางเลือกของฐานข้อมูล SQL และ quirks ที่ไม่ได้มาตรฐานและทางเลือกของเคียวรีเฟรมเวิร์กในสมการคุณอาจสิ้นสุดด้วยตัวเลือกอื่น คุณไม่ได้ให้ข้อมูลมากนักเกี่ยวกับข้อ จำกัด ของคุณ
SQL มาตรฐานใช้เครื่องหมายคำพูดขึ้นสองเท่า MySQL ต้องยอมรับว่าเป็นไปตามความสมเหตุสมผล
'He said, "Don''t!"'
'
" ภายในสตริงที่ยกมาด้วย " '
" อาจเขียนเป็น " ''
" . “ "
” ภายในสตริงที่ยกมาด้วย“ "
” อาจเขียนเป็น“ ""
” นำหน้าอักขระเครื่องหมายคำพูดโดยอักขระเลี่ยง ("` `")
สิ่งที่ฉันเชื่อว่า user2087510 หมายถึงคือ:
name = 'something'
name = name.replace("'", "\\'")
ฉันเคยใช้สิ่งนี้ด้วยความสำเร็จ
นี่คือตัวอย่าง:
SELECT * FROM pubs WHERE name LIKE "%John's%"
เพียงใช้เครื่องหมายคำพูดคู่เพื่อใส่เครื่องหมายคำพูดเดี่ยว
หากคุณยืนยันในการใช้เครื่องหมายคำพูดเดี่ยว (และความจำเป็นในการหลีกเลี่ยงอักขระ):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
มีสามวิธีที่ฉันรู้ คนแรกไม่ได้เป็นคนที่สวยที่สุดและคนที่สองเป็นคนธรรมดาในภาษาการเขียนโปรแกรมส่วนใหญ่:
'I mustn''t sin!'
\
ก่อนเครื่องหมายคำพูดเดี่ยว'
:'I mustn\'t sin!'
"I mustn't sin!"
\'
เหมือนที่ใช้โดยภาษาการเขียนโปรแกรมจำนวนมาก แต่''
ได้รับการสนับสนุนโดยภาษา SQL เพิ่มเติมดังนั้นการใช้ตัวเลือก 1 จะดีกว่าสำหรับความเข้ากันได้ ตัวอย่างเช่น Sqlite ไม่สามารถใช้กับเครื่องหมายแบคสแลชได้
แทนที่สตริง
value = value.replace(/'/g, "\\'");
โดย value คือสตริงของคุณที่จะจัดเก็บในฐานข้อมูลของคุณ
เพิ่มเติม
แพคเกจ NPM สำหรับสิ่งนี้คุณสามารถดูได้
ฉันคิดว่าถ้าคุณมีจุดข้อมูลที่มีเครื่องหมายอะโพสโทรฟีคุณสามารถเพิ่มอะพอสโทรฟีหนึ่งอันต่อหน้าอะพอสโทรฟีได้
เช่น. 'นี่คือสถานที่ของจอห์น'
ที่นี่ MySQL คิดสองประโยค 'นี่คือสถานที่ของจอห์น'
คุณสามารถใส่ 'นี่คือสถานที่ของจอห์น' ฉันคิดว่ามันควรจะทำงานอย่างนั้น
ใน PHP ฉันชอบใช้ mysqli_real_escape_string () ซึ่งใช้อักขระพิเศษในสตริงเพื่อใช้ในคำสั่ง SQL
ดูhttps://www.php.net/manual/en/mysqli.real-escape-string.php
อาจเป็นหัวข้อนอกเรื่อง แต่คุณอาจมาที่นี่เพื่อหาวิธีในการฆ่าเชื้อการป้อนข้อความจากรูปแบบ HTML ดังนั้นเมื่อผู้ใช้ป้อนอักขระอะโพสโทรฟีมันจะไม่เกิดข้อผิดพลาดเมื่อคุณพยายามเขียนข้อความไปยัง SQL ตารางที่ใช้ในฐานข้อมูล มีสองวิธีในการทำเช่นนี้และคุณอาจต้องการอ่านเกี่ยวกับการฉีด SQL ด้วยเช่นกัน แต่ตัวเลือกง่ายๆใน PHP คือการใช้ฟังก์ชั่นhtmlspecialchars ()ซึ่งจะแปลง apostrophes ทั้งหมดของคุณ'
ซึ่งอาจเป็นสิ่งที่คุณต้องการจัดเก็บ อย่างไรก็ตาม.
''
หรือ\'
ไม่ถูกต้อง?