كيفية إدراج قيمة تحتوي على علامة اقتباس أحادية (اقتباس واحد)؟

StackOverflow https://stackoverflow.com/questions/1912095

  •  19-09-2019
  •  | 
  •  

سؤال

ما هو بناء جملة SQL الصحيح لإدراج قيمة مع النقاس فيه؟

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

استمر في الحصول على خطأ حيث أعتقد أن القيمة الباسورية بعد o هي العلامة المنتهية للقيمة.

هل كانت مفيدة؟

المحلول

الهروب من القيمة الباسورية (أي مضاعفة حرف اقتباس واحد) في SQL الخاص بك:

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

الأمر نفسه ينطبق على تحديد استعلامات:

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

تعد الاقتباسوفية أو الاقتباس الفردي شخصية خاصة في SQL تحدد بداية وتنتهي بيانات السلسلة. هذا يعني أنه لاستخدامه كجزء من بيانات السلسلة الحرفية التي تحتاج إليها escape الشخصية الخاصة. مع اقتباس واحد يتم إنجاز ذلك عادة عن طريق مضاعفة الاقتباس الخاص بك. (شخصين اقتباس واحد، وليس اقتباس مزدوج بدلا من اقتباس واحد.)

ملحوظة: يجب أن تقلق فقط من أي وقت مضى بشأن هذه المشكلة عند تحرير البيانات يدويا عبر واجهة SQL الخام لأن استعلامات الكتابة خارج التطوير والاختبار يجب أن يكون حدوث نادر. في التعليمات البرمجية توجد تقنيات وأطر (اعتمادا على مكدسك) تعتني بالهرب من الأحرف الخاصة، حقن SQL, ، إلخ.

نصائح أخرى

عليك فقط مضاعفة الاقتباسات الفردية ...

insert into Person (First, Last)
values ('Joe', 'O''Brien')

تحتاج إلى الهروب من القيمة الباسورية. في T-SQL. هذا هو مع الاقتباس أحادية مزدوجة، لذلك insert تصبح البيان:

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'

لأنه يتم استخدام اقتباس واحد للإشارة إلى بداية وتنتهي السلسلة؛ تحتاج إلى الهروب منه.

الجواب القصير هو استخدام عروض أسعار فردية - '' - من أجل قاعدة بيانات SQL لتخزين القيمة '.

إلقاء نظرة على استخدام استبدال لتعقيم القيم الواردة:

تريد التحقق من '''', ، واستبدالها إذا كانت موجودة في السلسلة مع '''''' من أجل الهروب من اقتباس وحيد الوحيد.

كان Eduffy فكرة جيدة. وبعد لقد حصل عليه للتو في مثال الكود الخاص به. إما في JavaScript أو في SQLite، يمكنك استبدال النقاط الفاصلة مع رمز اللكنة.

إنه (بطريق الخطأ أنا متأكد) وضع رمز اللكنة كمسؤول عن السلسلة بدلا من استبدال النقاس في أوبريان. هذا في الواقع حل بسيط للغاية لمعظم الحالات.

يمكن إدراج حرف الباستروفي عن طريق الاتصال شار وظيفة مع الباسوسوفية البحث عن الجدول ASCII. القيمة، 39. يمكن بعد ذلك متسلسل قيم السلسلة مع مشغل concatenate.

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')

يتم هرب اقتباسات واحدة من خلال مضاعفة لهم,

يوضح SQL التالي هذه الوظيفة.

declare @person TABLE (
    [First] nvarchar(200),
    [Last] nvarchar(200)
)

insert into @person 
    (First, Last)
values
    ('Joe', 'O''Brien')

select * from @person

نتائج

First   | Last
===================
Joe     | O'Brien

استخدم علامات اقتباس مزدوجة حول القيم.

insert into Person (First, Last) Values("Joe","O'Brien")

استخدم Backtick (على المفتاح ~) بدلا من ذلك؛

`O'Brien`
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top