الهروب الطابع اقتباس مفردة للاستخدام في استعلام سكليتي

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

  •  03-07-2019
  •  | 
  •  

سؤال

وكتبت مخطط قاعدة البيانات (جدول واحد فقط حتى الآن)، وادخال البيانات لهذا الجدول في ملف واحد. بعد ذلك إنشاء قاعدة البيانات كما يلي:

$ sqlite3 newdatabase.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> .read ./schema.sql
SQL error near line 16: near "s": syntax error

والخط 16 من ملفي يبدو شيئا من هذا القبيل:

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there\'s');

والمشكلة هي حرف الهروب للتعبير واحد. كما أنني حاولت ضعف الهروب من اقتباس مفردة (باستخدام \\\' بدلا من \')، ولكن هذا لم ينجح أيضا. ما أفعل الخطأ؟

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

المحلول

وحاول مضاعفة على علامات الاقتباس المفردة (العديد من قواعد البيانات تتوقع أن الطريق)، لذلك ستكون كما يلي:

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');

واقتبس ذات الصلة من الوثائق :

<اقتباس فقرة>   

ويتم تشكيل ثابت سلسلة بواسطة إحاطة سلسلة في علامات الاقتباس المفردة ( '). واقتبس احد داخل السلسلة يمكن ترميز عن طريق وضع علامات الاقتباس المفردة اثنين في صف واحد - كما هو الحال في باسكال. لا يتم اعتماد الهروب على غرار C باستخدام حرف مائل لأنها ليست SQL القياسية. الحرفية BLOB هي سلسلة حرفية تحتوي على البيانات الست عشرية ويسبقها "س" واحد أو حرف "X". ... ويمكن أيضا أن تكون قيمة حرفية الرمز المميز "NULL".

نصائح أخرى

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

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');

ولاستبدال كافة ( ') في سلسلة الخاص بك، استخدم

.replace(/\'/g,"''")

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

sample = "St. Mary's and St. John's";
escapedSample = sample.replace(/\'/g,"''")

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

String mystring = "Sample's";
String myfinalstring = mystring.replace("'","''");

 String query = "INSERT INTO "+table name+" ("+field1+") values ('"+myfinalstring+"')";

وهذا يعمل بالنسبة لي في ج # وجافا

في C # يمكنك استخدام التالية لاستبدال اقتباس مفردة مع اقتباس مزدوجة:

 string sample = "St. Mary's";
 string escapedSample = sample.Replace("'", "''");

والناتج سيكون:

"St. Mary''s"

وإذا كنت تعمل مع سكليتي مباشرة. يمكنك العمل مع الكائن بدلا من سلسلة والتقاط الأشياء الخاصة مثل DBNULL:

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top