خطأ عند استبدال الكلمات التي تحتوي على علامات الاقتباس في الخلية

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

  •  05-07-2019
  •  | 
  •  

سؤال

ولقد تحديث العديد من السجلات بالفعل، ولكن عندما وصل الأمر إلى الكلمة التي تحتوي على الاقتباس أحصل على هذا الخطأ: "خطأ: الاقتباس غير مغلق @ 1357"

وأنا أعرف السبب في انه يعطيني هذا الخطأ، أنا فقط لا كيفية حلها.

وهنا عينة: UPDATE invnum SET cAccountName = استبدال (cAccountName، "JOHN'S '،' BEN ')

وشكرا مقدما.

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

المحلول

ونقلت الهروب داخل سلاسل:

UPDATE invnum SET cAccountName = replace(cAccountName,'JOHN\'S','BEN')

وأنت تريد أن تكون حذرا حقا مع هذا - لا تتعامل مع هذا صحيح هو مصدر SQL هجمات حقن ، ومصدرا رئيسيا من المشاكل الأمنية.

نصائح أخرى

وإذا كنت تستخدم برنامج نصي لتحديث السجلات الخاصة بك استخدام وظيفة الهروب المضمن. لفب التي من شأنها أن تكون mysql_real_escape_string

وجرب هذا بدلا من ذلك:

UPDATE invnum SET cAccountName = replace(cAccountName,"JOHN'S","BEN")

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

وعلى سبيل المثال:

Johns   becomes "Johns"
John's  becomes "John's" or 'John\'s'
"John"  becomes '"John"' or "\"John\""

وهلم جرا.

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