এসকিউএল সার্ভারে অক্ষর পালাতে


95

আমি পালানোর চরিত্রের সাথে উদ্ধৃতি ব্যবহার করতে চাই। আমি কিভাবে করব?

আমি এসকিউএল সার্ভারে ত্রুটি পেয়েছি

অক্ষরের স্ট্রিংয়ের পরে অনাবৃত উদ্ধৃতি চিহ্ন।

আমি varcharভেরিয়েবলে এসকিউএল কোয়েরি লিখছি তবে আমি ত্রুটিটি পেয়েছি:

অক্ষরের স্ট্রিংয়ের পরে অনাবৃত উদ্ধৃতি চিহ্ন।

আমি উদ্ধার চিহ্ন হিসাবে উদ্ধৃতি চিহ্নটি ব্যবহার করতে চাই।


4
আপনি কি আমাদের জিজ্ঞাসা দেখাতে পারেন দয়া করে ??
marc_s

উত্তর:


79

'আপনাকে বাঁচতে একযোগে আরেকটি আগে রাখা দরকার:''

দ্বিতীয় উত্তর যেমনটি দেখায় এটির মতো একক উদ্ধৃতি থেকে মুক্তি পাওয়া সম্ভব:

select 'it''s escaped'

ফলাফল হবে

it's escaped

যদি আপনি কার্যকর করতে (যেমন ডাইনামিক এসকিউএল) এসকিউএলকে কোনও ভ্রচারে সংযুক্ত করে থাকেন তবে আমি এসকিউএলকে প্যারামিটারাইজ করার পরামর্শ দিই। এসকিউএল ইনজেকশন থেকে রক্ষা করার ক্ষেত্রে এটির সুবিধা রয়েছে এর অর্থ আপনার এই জাতীয় উদ্ধৃতিগুলি রক্ষা করার বিষয়ে চিন্তা করতে হবে না (যা আপনি কোটগুলি দ্বিগুণ করেই করেন)।

উদাহরণস্বরূপ না করে

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)

এটা চেষ্টা কর:

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'

30
কেন এটি গৃহীত উত্তর? এটি প্রশ্নের উত্তর দেয় না।
পিটার মুর

4
@ পিটারমুর হয় নয়তো ওপি আমার উত্তরটির প্রথম অংশটি ব্যবহার করবে (নীচের অন্যান্য উত্তর অনুসারে উদ্ধৃতিগুলি দ্বিগুণ করবে), অথবা একটি স্ট্রিং ভেরিয়েবলের জন্য এসকিউএল কোয়েরি তৈরির জন্য আমি প্রস্তাবিত পছন্দসই পদ্ধতির ব্যবহার করতাম - প্যারামিটারাইজড ব্যবহার করতে এসকিউএল। যে কোনও
উপায়েই

এটি প্রশ্নের উত্তর দেয় না। কখনও কখনও ব্যবহারকারীর জন্য ওডিবিসি সংযোগ প্রয়োজন যার অর্থ আপনি কেবল খাঁটি এসকিউএল ব্যবহার করতে পারেন।
টনি

আরও সম্পাদনা করা উত্তর এটি আরও পরিষ্কার এবং আরও ভাল প্রশ্নের সাথে
মানিয়ে যায়

123

আপনি এই জাতীয় উদ্ধৃতি এড়াতে পারেন:

select 'it''s escaped'

ফলাফল হবে

it's escaped

এই উত্তর হওয়া উচিত।
টনি

46

আপনি আপনার পালানোর চরিত্রটি সংজ্ঞায়িত করতে পারেন তবে এটি কেবল একটি দিয়ে ব্যবহার করতে পারেন LIKE ধারা ।

উদাহরণ:

SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'

এখানে এটি %পুরো স্ট্রিংয়ের জন্য অনুসন্ধান করবে এবং এভাবেই কেউ এর ESCAPEমধ্যে সনাক্তকারী ব্যবহার করতে পারে SQL Server


21

আপনার স্ট্রিংয়ের ভিতরে আপনাকে কেবল প্রতিস্থাপন 'করতে হবে''

SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'

আপনি ব্যবহার করতে পারেন REPLACE(@name, '''', '''''')এসকিউএল ডায়নামিকালি জেনারেট করলে পারেন

আপনি যদি কোনও লাইক স্টেটমেন্টের মধ্যে দিয়ে পালাতে চান তবে আপনার ESCAPE বাক্য গঠনটি ব্যবহার করতে হবে

এটি উল্লেখ করার মতো বিষয়ও যদি আপনি এটি বিবেচনা না করেন তবে আপনি নিজেকে এসকিউএল ইনজেকশন আক্রমণে উন্মুক্ত রেখে চলেছেন। Google বা এ আরো তথ্য: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F


এবং তবুও ডুগোকন্টটোভ বা রিচার্ডপিয়ঙ্কার উত্তরগুলির মতো কোনও মিল নেই -1?
Seph

@ মিশেলমুনসে এটি নিজের জন্য চেষ্টা করুন: select 'ত্রুটিটি ফিরিয়ে দেয় Unclosed quotation mark after the character string ''। আমার উত্তরের কোথাও আমি "কেবল দু'টি ব্যবহার করি 'না, নিশ্চিত কেন জানি নিচে ভোট দিয়ে আমার একমাত্র উত্তর।
Seph

12

এমএসএসকিউএল থেকে বেরিয়ে আসা উদ্ধৃতিগুলি একটি ডাবল উদ্ধৃতি দ্বারা সম্পন্ন হয়, সুতরাং একটি ''বা একটি যথাক্রমে ""পালিয়ে যাওয়া 'এবং উত্পাদিত করবে "


0

আপনি **\**যে মানটি যেমন পালাতে চান তার আগে আপনি অক্ষরটি ব্যবহার করতে পারেনinsert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'


0

আপনি যদি কোনও ভেরিয়েবলের ব্যবহারকারীর ইনপুট থেকে বাঁচতে চান তবে এসকিউএল এর মধ্যে নীচের মতো করতে পারেন

  Set @userinput = replace(@userinput,'''','''''')

@ ইউজারিনপুট এখন প্রতিটি উদ্ধৃতির প্রতিটি ঘটনার জন্য অতিরিক্ত একক উদ্ধৃতি দিয়ে পালানো হবে



-2

কোডটি পড়তে সহজ রাখতে, আপনি []স্ট্রিংটি ধারণ করতে 'বা এর বিপরীতে বর্গাকার বন্ধনী ব্যবহার করতে পারেন ।


এটি ভুল। বন্ধনীগুলি ক্ষেত্র, টেবিল বা স্কিমা নামগুলিতে অবৈধ অক্ষরের উপর কাজ করে।
জেমি মার্শাল

হ্যাঁ, আপনি ঠিক বলেছেন, এটি বস্তুর নামের জন্য, স্ট্রিংয়ের সামগ্রী নয়। আমার অবশ্যই প্রশ্নটি ভুল করে পড়তে হবে।
বেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.