মাইএসকিএলে অ্যাডোস্ট্রোফ (') এড়াতে কীভাবে?


146

মাইএসকিউএল ডকুমেন্টেশন বলছেন যে এটা করা উচিত \'। তবে স্কাইট এবং মাইএসকিএল উভয়ই এটি ''কাজ করে। আমি এটি দেখেছি এবং এটি কাজ করে। আমার কি করা উচিৎ?


আপনি সঠিক ''বা \'সঠিক সম্পর্কে কথা বলছেন ?
র‌্যাপটার

\'মাইএসকিউএল সুনির্দিষ্ট যখন ''এএনএসআই এসকিউএল অনুগত তবে যদি আমি ভুল না করি
apokryfos

এসকিউএল এর প্রয়োগের উপর নির্ভর করে; - '' \ '', '\' ', এবং কখনও কখনও' [']' 'কোড থেকে বিরতি দেয়। এর উপরে ইউনিকোডের যে কোনও সংখ্যক প্রতিস্থাপন এই চেকটিকে বাইপাস করবে। এখানে পুরো গেমটি '' ভিত্তিক বেঁচে থাকার গুণকে গালাগালি করছে যে এর পক্ষে চূড়ান্ত 'গণনাটি বিজোড়ের চেয়ে আরও বেশি হওয়া দরকার। এটি একে অপরের মধ্যে একাধিক অব্যাহতির পদ্ধতিগুলি ম্যাশ করে অদ্ভুত হয়ে যায়, আপনি পালানোকে পরাভূত করতে এবং কাঁচা এসকিউএল ইনজেক্ট করতে পারেন। গল্পের নৈতিকতা: স্ট্রিং ইন্টারপোলেশন কখনও ব্যবহার করবেন না, সর্বদা প্রস্তুত বিবৃতি ব্যবহার করুন।
শায়নে

উত্তর:


185

আপনি যে মাইএসকিউএল ডকুমেন্টেশনটি উদ্ধৃত করেছেন তা আপনি উল্লেখ করার চেয়ে কিছুটা বেশি বলেছেন। এটি আরও বলে,

একটি " '" সাথে উদ্ধৃত একটি স্ট্রিংয়ের ভিতরে " '" হিসাবে লেখা যেতে পারে ''

(এছাড়াও, আপনি লিঙ্ক ছক 8.1 এর মাইএসকিউএল 5.0 সংস্করণ। বিশেষ অক্ষর এস্কেপ সিকোয়েন্স , এবং বর্তমান সংস্করণটি 5.6 - কিন্তু বর্তমান ছক 8.1। বিশেষ অক্ষর এস্কেপ সিকোয়েন্স সৌন্দর্য চমত্কার অনুরূপ।)

আমি মনে করি প্যারামিটারে পোস্টগ্রাস নোটটিbackslash_quote (string) তথ্যবহুল:

\'কোনও স্ট্রোল আক্ষরিক দ্বারা একটি উদ্ধৃতি চিহ্নটি উপস্থাপন করা যায় কিনা তা এটি নিয়ন্ত্রণ করে । কোট চিহ্নটি উপস্থাপনের জন্য পছন্দের, এসকিউএল-স্ট্যান্ডার্ড উপায় হ'ল দ্বিগুণ করে ( '') তবে পোস্টগ্রিসকিউএল historতিহাসিকভাবেও গ্রহণ করেছে \'। তবে, এর ব্যবহার \'সুরক্ষা ঝুঁকি তৈরি করে ...

এটি আমাকে বলে যে একক-উদ্ধৃতি থেকে বাঁচতে ব্যাকস্ল্যাশ ব্যবহার করার চেয়ে দ্বিগুণ একক-উদ্ধৃতি চরিত্রটি ব্যবহার করা একটি সর্বোত্তম এবং দীর্ঘমেয়াদী পছন্দ।

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


42

স্ট্যান্ডার্ড এসকিউএল ডাবল-আপ কোট ব্যবহার করে; মাইএসকিউএলকে যুক্তিসঙ্গতভাবে মেনে চলতে হবে accept

'He said, "Don''t!"'

+1 টি। এটি কোথায় বলেছে যে এটি '' dev.mysql.com/doc/refman/5.0/en/…
ইউজার 4951

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

1
এটি দ্বিগুণ করে এস্ট্রোফের হাত থেকে বাঁচার সেরা উপায়।
অ্যালেক্স _TNT

10

আমি বিশ্বাস করি যে ব্যবহারকারী 2087510 এর অর্থ হ'ল:

name = 'something'
name = name.replace("'", "\\'")

আমি এটি সাফল্যের সাথেও ব্যবহার করেছি।


1
Top শীর্ষস্থানীয় উত্তরগুলি না দিলে আমার পক্ষে কাজ করেছেন
জ্যারেড

1
\\ 'এর চেয়ে?' কেন?
বিনিয়াম

@ বিনিয়াম_ ইথিওপিয়া দ্বিতীয় \ প্রথমটি থেকে পালিয়ে গেছে
জুহা আনটিনেন

2
সম্ভাব্য সুরক্ষা সমস্যা। স্ট্রিংটিতে ইতিমধ্যে \ 'অন্তর্ভুক্ত থাকলে এসকিএল ইনজেকশন পাওয়া যায়, সুতরাং আপনি একটি sert সন্নিবেশ করান যা এখন স্ট্রিংটিতে \\' হিসাবে রয়েছে যা স্ট্রিংটি সমাপ্ত করবে। পরিবর্তে নাম.প্লেস ("" "," "" ") ব্যবহার করুন
গার গডফ্রে


5

এখানে একটি উদাহরণ:

SELECT * FROM pubs WHERE name LIKE "%John's%"

একক উদ্ধৃতি আবদ্ধ করতে কেবল ডাবল উদ্ধৃতি ব্যবহার করুন।

যদি আপনি একক উদ্ধৃতি (এবং চরিত্রটি থেকে বাঁচার প্রয়োজনীয়তা) ব্যবহার করতে জেদ করেন:

SELECT * FROM pubs WHERE name LIKE '%John\'s%'

4

আমি তিনটি উপায় অবগত। প্রথমটি সবচেয়ে সুন্দর নয় এবং দ্বিতীয়টি বেশিরভাগ প্রোগ্রামিং ভাষায় সাধারণ উপায়:

  1. অন্য একক উদ্ধৃতি ব্যবহার করুন: 'I mustn''t sin!'
  2. \একক উদ্ধৃতির আগে পলায়ন চরিত্রটি ব্যবহার করুন ':'I mustn\'t sin!'
  3. একক উদ্ধৃতির পরিবর্তে স্ট্রিং আবদ্ধ করতে ডাবল উদ্ধৃতি ব্যবহার করুন: "I mustn't sin!"

আমার ব্যক্তিগত পছন্দটি \'হ'ল এটি যেমন অনেক প্রোগ্রামিং ভাষা ব্যবহার করে তবে ''আরও এসকিউএল উপভাষা দ্বারা সমর্থন করা হয়, সুতরাং সামঞ্জস্যতার জন্য বিকল্প 1 ব্যবহার করা আরও ভাল। উদাহরণস্বরূপ স্ক্লাইটটি ব্যাকস্ল্যাশ পলায়নের সাথে কাজ করে না।
Okdewit

0

স্ট্রিং প্রতিস্থাপন করুন

value = value.replace(/'/g, "\\'");

যেখানে মান আপনার স্ট্রিং যা আপনার ডাটাবেসে সংরক্ষণ করতে চলেছে।

উপরন্তু,

এর জন্য এনপিএম প্যাকেজ, আপনি এটি দেখতে পারেন

https://www.npmjs.com/package/mysql-apostrophe


দয়া করে উত্তর হিসাবে কোনও সরঞ্জাম বা লাইব্রেরি পোস্ট করবেন না। কমপক্ষে প্রদর্শিত হবে যে কীভাবে এটি উত্তরে নিজেই সমস্যাটি সমাধান করে।
বাউম মিট অউজেন

যে কাজ করে না। আপনি জিনিস পালাতে ভুলে গেছেন। (/ \ '/ g, "\\\" ") প্রতিস্থাপন করুন
মাইকেল 22

0

আমি মনে করি আপনার যদি অ্যাস্টোস্ট্রোফের সাথে কোনও ডেটা পয়েন্ট থাকে তবে আপনি এস্ট্রোস্ট্রোফের আগে একটি অ্যাডাস্ট্রোফ যুক্ত করতে পারেন

যেমন। 'এটাই জনের জায়গা'

এখানে এমওয়াইএসকিউএল দুটি বাক্য ধরে নিয়েছে 'এটি হ'ল জন'র স্থান'

আপনি 'এটি হ'ল জন'র স্থান' রাখতে পারেন। আমি মনে করি এটি সেভাবে কাজ করা উচিত।



0

সম্ভবত অফ-টপিক, তবে সম্ভবত আপনি এখানে এইচটিএমএল ফর্ম থেকে পাঠ্য ইনপুট স্যানিটাইজ করার একটি উপায় সন্ধান করতে এসেছেন, যাতে কোনও ব্যবহারকারী যখন এসিকিউএল-এ লেখার চেষ্টা করে তখন কোনও ত্রুটি ছুঁড়ে না ফেলে একটি ডিবি ভিত্তিক টেবিল। এটি করার কয়েকটি উপায় রয়েছে এবং আপনি এসকিউএল ইঞ্জেকশন সম্পর্কেও পড়তে চাইতে পারেন, তবে পিএইচপি-র একটি সহজ বিকল্প হল এইচটিএমএল স্পেশালচার্স () ফাংশনটি ব্যবহার করা 'যা আপনার সমস্ত এস্ট্রোফেসকে রূপান্তরিত করবে যা সম্ভবত আপনি সংরক্ষণ করতে চান যাহাই হউক না কেন।


এনকোডিং সংরক্ষণের জন্য নয়, এটি প্রদর্শনের জন্য। প্রস্তুত বিবৃতি ব্যবহার করুন।
মিকম্যাকুসা

আমি সম্মত যে প্রস্তুত বিবৃতিগুলি সুরক্ষা এবং নির্ভরযোগ্যতার জন্য স্বর্ণের মান। আমি একটি নির্দিষ্ট ক্ষেত্রে হাইলাইট করছিলাম যেখানে আপনি পাঠ্য ডেটা এইচটিএমএল হিসাবে সঞ্চয় করতে চাইতে পারেন, সেক্ষেত্রে আমার পদ্ধতিটি পরিবর্তিত পরিবর্তে সীমাবদ্ধ প্যারামিটারগুলি ব্যবহার করা ছাড়াও। এইচটিএমএল, এইচটিএমএল আউট।
গ্রিন্ডলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.