অ্যাডাস্ট্রোফ (একক উদ্ধৃতি) রয়েছে এমন একটি মান কীভাবে সন্নিবেশ করবেন?


310

এর মধ্যে অ্যাডাস্ট্রোফের সাথে কোনও মান toোকানোর জন্য সঠিক এসকিউএল সিনট্যাক্সটি কী?

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

আমি একটি ত্রুটি পেতে থাকি কারণ আমি মনে করি যে ও এর পরে অ্যাস্টোস্ট্রোফ হ'ল মানটির জন্য শেষ ট্যাগ।


16
দয়া করে নিশ্চিত করুন যে আপনি নিজেকে এসকিউএল ইনজেকশন আক্রমণে খুলছেন না। যেখানে সম্ভব সেখানে পরামিতি ব্যবহার করুন।
অ্যান্ড্রু

আপনি কোন স্ক্রিপ্টিং ভাষা ব্যবহার করছেন? পিএইচপি-তে ফাংশন রয়েছে, উদাহরণস্বরূপ, আপনার পক্ষে এটি সঠিকভাবে করা।
ফিলিফ্রেও

এখানে অ্যান্ড্রুয়ের সাথে সম্মত: আমি আশা করি এই প্রশ্নটি কেবলমাত্র এসকিউএল ক্লায়েন্ট বা "কোয়েরি ব্রাউজার" এর মাধ্যমে চালানোর ক্ষেত্রেই বা আসলে কোডের কোথাও নয়। প্যারামিটারাইজড স্টেটমেন্ট ব্যবহার না করা বোকামি।
চরস্তর

এটি আসলে কোডে আছে .. আমার যদি একটি প্যারামিটারাইজড কোয়েরি থাকে তবে আমাকে কি একই জিনিসটি করতে হবে না?
লিওরা

2
নেতিবাচক. আপনি যে ডাটাবেস এবং ড্রাইভারটি ব্যবহার করছেন তার উপর নির্ভর করে প্যারামিটারগুলির বিচ্ছিন্নতা আলাদাভাবে পরিচালনা করা যেতে পারে তবে পরামিতি বিবৃতিতে পরামিতিগুলির পালানোর প্রয়োজন নেই। দেখুন en.wikipedia.org/wiki/SQL_injection#Preventing_SQL_injection
charstar

উত্তর:


485

আপনার এসকিউএল-তে অ্যাডাস্ট্রোফ (যেমন একক উদ্ধৃতি চরিত্রটি ডাবল-আপ) এড়ান:

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

এটিই নির্বাচনী প্রশ্নগুলিতে প্রযোজ্য:

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

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

দ্রষ্টব্য : আপনি যখনই কোনও কাঁচা এসকিউএল ইন্টারফেসের মাধ্যমে ম্যানুয়ালি ডেটা সম্পাদনা করেন তখনই এই সমস্যাটি নিয়ে আপনার চিন্তিত হওয়া উচিত, যেহেতু বিকাশের বাইরে পরীক্ষা এবং পরীক্ষার বাইরে প্রশ্ন লেখাই খুব বিরল ঘটনা হওয়া উচিত। কোডে এমন কৌশল এবং ফ্রেমওয়ার্ক রয়েছে (আপনার স্ট্যাকের উপর নির্ভর করে) যা বিশেষ অক্ষরগুলি, এসকিউএল ইঞ্জেকশন ইত্যাদির অব্যবহারের যত্ন নেয়


6
linkQuestion = str_replace ("" "," "" ", $ linkQuestion); (পড়তে
পারা

যদি কোনও ব্যক্তিকে ডেটা Inোকানো হয় (প্রথম, শেষ) মানগুলি 'জো', 'বাবার দোকান'।
বিজেজ


21

আপনার এস্টোস্ট্রোফ থেকে বাঁচতে হবে। ইন টি-এসকিউএল এই, একটি ডবল ঊর্ধকমা সাথে আছেন তাই আপনার insertবিবৃতি হয়ে:

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

এএফআইকে Valuesঅবশ্যই বন্ধনীগুলিতে আবদ্ধ থাকতে হবে (যা এটি পরে @ জাস্টিননিউসনারের মতো একই উত্তর দেয়)
কিওয়ার্টি_সো

15

কারণ একটি স্ট্রিংয়ের শুরু এবং শেষ নির্দেশ করার জন্য একটি একক উদ্ধৃতি ব্যবহৃত হয়; আপনার এড়াতে হবে

সংক্ষিপ্ত উত্তরটি হল দুটি একক উদ্ধৃতি ব্যবহার করা - ''- কোনও এসকিউএল ডাটাবেসের জন্য মানটি সংরক্ষণ করার জন্য '

আগত মানগুলিকে স্যানিটাইজ করতে রিপ্লেস ব্যবহার করে দেখুন:

আপনি নিখুঁত একক উদ্ধৃতি থেকে বাঁচতে যদি ''''স্ট্রিংয়ের সাথে উপস্থিত থাকেন তবে তাদের অনুসন্ধান করতে এবং প্রতিস্থাপন করতে চান ''''''


3

এডুফি একটি ভাল ধারণা ছিল । তিনি তার কোড উদাহরণে এটি পেছনের দিকে পেয়েছেন। হয় জাভাস্ক্রিপ্ট বা এসকিউএলাইটে আপনি অ্যাকসেন্টের প্রতীক দিয়ে অ্যাস্টোস্ট্রোফ প্রতিস্থাপন করতে পারেন।

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


দুর্দান্ত এবং অনেক সহজ সমাধান এবং আমার শেষ নাম হ'ল রিলি!
ফিলিপুরিলি

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


2

একক উদ্ধৃতিগুলি দ্বিগুণ করে পালিয়ে গেছে ,

নিম্নলিখিত এসকিউএল এই কার্যকারিতা চিত্রিত করে।

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

0

মানগুলির চারপাশে ডাবল উদ্ধৃতি চিহ্ন ব্যবহার করুন।

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

3
মনে রাখবেন যে এটি আর কোনও স্ট্যান্ডার্ড এসকিউএল নয়, যদিও আমি ইনফর্মিক্সটি জানি, তবে একটি ডিবিএমএস এর নাম দিতে, এটি এটির অনুমতি দেয়। আপনি কীভাবে কোনও স্ট্রিং সন্নিবেশ করানো উচিত তাও সম্বোধন করা উচিত যেমন He said, "Don't!"একক উদ্ধৃতি এবং / অথবা ডাবল উদ্ধৃতি ব্যবহার করা - যা করা যেতে পারে: 'He said, "Don''t!"'বা "He said, ""Don't!"""। গ্রহণযোগ্য উত্তর সহ দীর্ঘ-প্রতিষ্ঠিত প্রশ্নের একটি নতুন উত্তর যুক্ত করার সময়, আপনাকে অবশ্যই নতুন, সম্পূর্ণ তথ্য সরবরাহ করতে হবে। ডাবল উদ্ধৃতি ব্যবহার করা নতুন - তবে কয়েকটি ডিবিএমএস-এর মধ্যে সীমাবদ্ধ; এগুলি গ্রহণ করে এমন কমপক্ষে একজনকে সনাক্ত করার জন্য আপনার ব্যথা করা উচিত।
জোনাথন লেফলার

-1

পরিবর্তে একটি ব্যাকটিক (~ কীতে) ব্যবহার করুন;

`O'Brien`

1
তার পরে সমস্যাটি হয়ে যায়: ব্যাকটিক কীভাবে sertোকানো যায়?
জ্যাস্পার ডি ভ্রিজ

1
যদিও এটি "সঠিক" উত্তর নয়, আমি এমন একটি নামের সাথে কাজ করছি যা এর নাম নেই এবং আমি একটি অপারেশন করছি, সুতরাং এটি সঙ্গে সঙ্গে আমার সমস্যার সমাধান করে। ধন্যবাদ!
nscalf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.