যখন মাইএসকিউএলে একক উদ্ধৃতি, ডাবল উদ্ধৃতি এবং ব্যাকটিকস ব্যবহার করবেন


633

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

উদাহরণ:

$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';

এছাড়াও, উপরের উদাহরণে, যে বিবেচনা table, col1, val1, ইত্যাদি ভেরিয়েবল করা যেতে পারে।

এর মান কী? আপনি কি করেন?

আমি প্রায় 20 মিনিট ধরে এখানে অনুরূপ প্রশ্নের উত্তরগুলি পড়ছি, তবে মনে হচ্ছে এই প্রশ্নের কোনও নির্দিষ্ট উত্তর নেই।


16
মনে রাখবেন এটি একটি খুব মাইএসকিউএল নির্দিষ্ট প্রশ্ন। এসকিউএল সাধারণভাবে (যেমন আইএসও / এএনএসআই এসকিউএল) কোটগুলির একটি আলাদা সেট রয়েছে: ডাবল কোটগুলি সীমানা চিহ্নিতকারীগুলির জন্য, যেমন "tablename", এবং একক উদ্ধৃতিগুলি আক্ষরিক জন্য, যেমন 'this is a some text'। ব্যাক-টিকগুলি কখনও স্ট্যান্ডার্ড এসকিউএল ব্যবহার করা হয় না। (যদি আপনাকে কোনও শনাক্তকারীতে ডাবল উক্তি অন্তর্ভুক্ত করতে হয় তবে এটি দ্বিগুণ টাইপ করুন "odd""tablename"Similarly একইভাবে, 'Conan O''Brien'
আক্ষরিক ক্ষেত্রে

উত্তর:


609

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

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

মাইএসকিউএলও আশা করে DATEএবং DATETIMEআক্ষরিক মানগুলির মতো স্ট্রিং হিসাবে একক-উদ্ধৃত হবে '2001-01-01 00:00:00'। তারিখের স্ট্রিংগুলিতে বিভাগটি ডিলিমিটার হিসাবে হাইফেন ব্যবহারের বিশেষ বিকল্পগুলিতে, আরও বিশদে বিশদগুলির জন্য ডেট এবং টাইম লিটারালস ডকুমেন্টেশনের সাথে পরামর্শ করুন-

সুতরাং আপনার উদাহরণ ব্যবহার করে, আমি পিএইচপি স্ট্রিংয়ের ডাবল-উদ্ধৃতি করব এবং মানগুলিতে একক উদ্ধৃতি ব্যবহার করব 'val1', 'val2'NULLএকটি মাইএসকিউএল কীওয়ার্ড এবং একটি বিশেষ (অ) মূল্যবান এবং তাই অব্যক্ত।

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

আরডিবিএমএসের স্থানীয় ফাংশনগুলির (উদাহরণস্বরূপ, NOW()মাইএসকিউএল) উদ্ধৃতি দেওয়া উচিত নয়, যদিও তাদের যুক্তিগুলি ইতিমধ্যে উল্লিখিত একই স্ট্রিং বা সনাক্তকারী উদ্ধৃতি বিধি সাপেক্ষে।

ব্যাকটিক (`)
টেবিল ও কলাম ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬ ───────┐
                      ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ ক্যোয়ারী = " IN টেবিল` T অন্তর্ভুক্ত করুন (` আইডি, `কল 1`,` কল 2`, `ডেট`,` আপডেট`)
                       ভ্যালু (নাল, 'ভাল 1', 'ভাল 2', '2001-01-01', এখন ()) ";
                               ↑↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑ ↑↑↑↑↑ 
উদ্ধৃত কীওয়ার্ড ─────┴┴┴┘ │ │ │ │ │ │ │││││
একক-উদ্ধৃত (') স্ট্রিং ───────────┴────┴──┴────┘ │ │ │││││ │││││
একক-উদ্ধৃত (') তারিখ ───────────────────────────┴──────────┘ ││││ ││││ │
উদ্ধৃত ফাংশন ─────────────────────────────────────────┴┴┴┴┘    

পরিবর্তনশীল দ্বিখণ্ডন

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

// কিছু পরিবর্তনশীল প্রতিস্থাপনের সাথে একই জিনিস
// এখানে, একটি চলক টেবিলের নাম $ টেবিলটি ব্যাকটিক-কোটেড এবং ভেরিয়েবল
VALUES তালিকায় // একক-উদ্ধৃত হয় 
$ ক্যোয়ারী = " $ $ টেবিল` এর মধ্যে অন্তর্ভুক্ত করুন (` আইডি, `কল 1`,` কল 2, `তারিখ) ভ্যালু (নাল, '$ ভাল 1' , '$ ভাল 2' , '$ তারিখ' )";

বিবৃতি প্রস্তুত

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

// PDO example with named parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)";

// MySQLi example with ? parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";

সনাক্তকারীগুলিতে ব্যাকটিকের উদ্ধৃতি দেওয়ার অক্ষর:

মাইএসকিউএল ডকুমেন্টেশন অনুযায়ী আপনার নীচের অক্ষর সেটটি ব্যবহার করে (ব্যাকটিক) সনাক্তকারীদের উদ্ধৃতি দেওয়ার দরকার নেই:

এএসসিআইআই: [0-9,a-z,A-Z$_](মৌলিক লাতিন অক্ষর, সংখ্যা 0-9, ডলার, আন্ডারস্কোর)

আপনি উদাহরণস্বরূপ সাদা স্থান সহ টেবিল বা কলাম শনাক্তকারী হিসাবে সেটের বাইরে অক্ষরগুলি ব্যবহার করতে পারেন, তবে তারপরে আপনাকে সেগুলি উদ্ধৃত করতে হবে (ব্যাকটিক)।


43
" তবে একক কোটগুলি অন্যান্য আরডিবিএমএস দ্বারা আরও ব্যাপকভাবে গৃহীত হয়েছে " - স্ট্রিং লিটারেলের জন্য একক উদ্ধৃতি ব্যবহার করে এসকিউএল স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত করা হয় (এবং প্রয়োজনীয়)
a_horse_with_no_name

@a_horse_with_no_name প্রায় কেউ এএনএসআই মাইএসকিউএল ব্যবহার করে না ('|' স্ট্রিং কনক্যাট - সত্যই?)
শুভ ব্যক্তি

3
এটি সত্য নয়: "মাইএসকিউএল আশা করে যে '2001-01-01 00:00:00' এর মতো স্ট্রিং হিসাবে তারিখ এবং DATETIME আক্ষরিক মানগুলি একক-কোট করা হবে"
কিক_থ_বুকেট

3
@ivilReiko মাইএসকিউএল ডক্সে উলামের উক্তিটি স্পষ্টভাবে উদ্ধৃত করে বলে মনে হচ্ছে না। এটি এলিয়াসগুলির জন্য একক, ডাবল, বা ব্যাকটিক গ্রহণ করবে তবে এটি বিভিন্ন এএনএসআই এসকিউএল মোড দ্বারা প্রভাবিত হতে পারে। আমি নিশ্চিত নই যে এসকিউএল অনুমানের জন্য উপন্যাসের উদ্ধৃতিগুলির জন্য কী প্রয়োজন - ব্যক্তিগত অগ্রাধিকার: ধারাবাহিকতার জন্য আমি তাদেরকে কলাম শনাক্তকারীদের মতোই উদ্ধৃত করি - অর্থাৎ, প্রয়োজনে আমি সেগুলি ব্যাকটিক করি, না হলে তাদের উদ্ধৃত না রেখেই চলে যাই। আমি উপন্যাসগুলিতে একক বা ডাবল উদ্ধৃতি ব্যবহার করি না।
মাইকেল বার্কোভস্কি 16'17

2
@ গুণয়েজান হ্যাঁ, খুব দুর্বল। কোনও টেবিলের নামের জন্য ভেরিয়েবলটি কখনই ব্যবহার করবেন না যদি না তা গ্রহণযোগ্য টেবিলের নামের তালিকার সাথে বৈধতা না দেওয়া হয় - অনুমতিযোগ্য নামের একটি অ্যারে তৈরি করুন এবং ভেরিয়েবলের তালিকায় থাকা কিছুতে এটি ব্যবহারের জন্য নিরাপদ করতে পরীক্ষা করুন। অন্যথায় আপনি ব্যবহারের জন্য কোনও টেবিলের নাম ভেরিয়েবলকে নিরাপদে এড়াতে পারবেন না।
মাইকেল বারকোভস্কি

121

মাইএসকিউএলে দুটি ধরণের উদ্ধৃতি রয়েছে:

  1. ' স্ট্রিং লিটারেলগুলি ঘের জন্য
  2. ` শনাক্তকারী যেমন টেবিল এবং কলামের নামগুলি ঘের জন্য

এবং তারপরে "একটি বিশেষ ক্ষেত্রে রয়েছে। এটা তোলে জন্য ব্যবহার করা যেতে পারে এক মাইএসকিউএল সার্ভারের উপর নির্ভর করে একটি সময়ে উল্লিখিত উদ্দেশ্যে sql_mode:

  1. ডিফল্টরূপে" চরিত্র ঠিক স্ট্রিং লিটারেল ঘিরা ব্যবহার করা যেতে পারে'
  2. ইন ANSI_QUOTESমোড "চরিত্র ঠিক শনাক্তকারী ঘিরা ব্যবহার করা যেতে পারে`

নিম্নলিখিত কোয়েরিটি এসকিউএল মোডের উপর নির্ভর করে বিভিন্ন ফলাফল (বা ত্রুটি) উত্পন্ন করবে:

SELECT "column" FROM table WHERE foo = "bar"

ANSI_QUOTES অক্ষম

কোয়েরি স্ট্রিং আক্ষরিক নির্বাচন করবে "column"যেখানে কলামটি fooস্ট্রিংয়ের সমান"bar"

ANSI_QUOTES সক্ষম হয়েছে

কোয়েরিটি কলামটি columnকলামের fooসমান যেখানে কলামটি নির্বাচন করবেbar

কখন কী ব্যবহার করবেন

  • আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি যাতে ব্যবহারটি এড়াতে "পারেন যাতে আপনার কোড এসকিউএল মোডের থেকে আলাদা হয়ে যায়
  • এটি সর্বদা শনাক্তকারীদের উদ্ধৃতি করুন এটি একটি ভাল অনুশীলন (এটি নিয়ে বেশ কয়েকটি প্রশ্ন এটি নিয়ে আলোচনা করুন)

32

(আপনার প্রশ্নের এসকিউএল প্রকৃতি সম্পর্কে উপরে ভাল উত্তর রয়েছে তবে আপনি পিএইচপি-তে নতুন হলে এটি প্রাসঙ্গিকও হতে পারে))

সম্ভবত এটি উল্লেখ করা জরুরী যে পিএইচপি একক এবং ডাবল উদ্ধৃত স্ট্রিংগুলি ভিন্নভাবে পরিচালনা করে ...

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

উদাহরণ:

$foo = "bar";
echo 'there is a $foo'; // There is a $foo
echo "there is a $foo"; // There is a bar
echo `ls -l`; // ... a directory list

23

ব্যাকটিকগুলি সাধারণত একটি নির্দেশিত করতে ব্যবহৃত হয় identifierএবং সংরক্ষণযোগ্য কীওয়ার্ডগুলি দুর্ঘটনাক্রমে নিরাপদ থাকতে পারে ।

উদাহরণ স্বরূপ:

Use `database`;

এখানে ব্যাকটিকস সার্ভারকে বুঝতে সাহায্য করবে যে এটি databaseআসলে ডাটাবেসের নাম, ডাটাবেস শনাক্তকারী নয়।

টেবিলের নাম এবং মাঠের নামগুলির জন্যও একই কাজ করা যেতে পারে। আপনি ব্যাকটিক্স দিয়ে আপনার ডাটাবেস শনাক্তকারীকে আবৃত রাখলে এটি খুব ভাল অভ্যাস

পরীক্ষা করে দেখুন এই ব্যাকটিক সম্পর্কে আরো বুঝতে উত্তর।


এখন ডাবল উদ্ধৃতি এবং একক উদ্ধৃতি সম্পর্কে (মাইকেল ইতিমধ্যে এটি উল্লেখ করেছে)।

তবে, একটি মান নির্ধারণ করতে আপনাকে একক বা ডাবল উদ্ধৃতি ব্যবহার করতে হবে। আরেকটি উদাহরণ দেখতে দিন।

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, title1);

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

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, 'title1');

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

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

এখন, পিএইচপি-তে ডাবল উদ্ধৃতি ব্যবহার করে আপনি ভেরিয়েবলগুলি তৈরি করতে পারবেন $val1এবং $val2তাদের মানগুলি ব্যবহার করতে এইভাবে একটি সঠিক বৈধ কোয়েরি তৈরি করুন creating মত

$val1 = "my value 1";
$val2 = "my value 2";
$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

তৈরি করব

INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, 'my value 1', 'my value 2')

15

মাইএসকিউএল, এই চিহ্ন একটি ক্যোয়ারী সীমানা ব্যবহার করা হয় `, ", 'এবং ()

  1. "বা 'স্ট্রিং-জাতীয় মানগুলি "26-01-2014 00:00:00"বা ঘের জন্য ব্যবহৃত হয় '26-01-2014 00:00:00'। এই প্রতীক শুধুমাত্র স্ট্রিং জন্য, সমষ্টিগত না ফাংশন পছন্দ now, sumঅথবা max

  2. ` টেবিল বা কলামের নামগুলি বদ্ধ করার জন্য ব্যবহৃত হয়, যেমন select `column_name` from `table_name` where id='2'

  3. (এবং )কেবল একটি প্রশ্নের যেমন অংশগুলি আবদ্ধ করুন select `column_name` from `table_name` where (id='2' and gender='male') or name='rakesh'


13

মাইএসকিউএল এবং পিএইচপি-র স্ট্রিং লিটারালগুলি একই।

একটি স্ট্রিং বাইট বা অক্ষরগুলির ক্রম, একক উদ্ধৃতি ("" ") বা ডাবল উদ্ধৃতি (" "") অক্ষরের মধ্যে আবদ্ধ।

সুতরাং যদি আপনার স্ট্রিংয়ে একক উক্তি থাকে, তবে আপনি স্ট্রিংটি উদ্ধৃত করতে ডাবল উদ্ধৃতি ব্যবহার করতে পারেন, বা এতে যদি ডাবল উদ্ধৃতি রয়েছে, তবে আপনি স্ট্রিংয়ের উদ্ধৃতিতে একক উদ্ধৃতি ব্যবহার করতে পারেন। তবে যদি আপনার স্ট্রিংয়ে একক উদ্ধৃতি এবং ডাবল উদ্ধৃতি উভয় থাকে তবে আপনার স্ট্রিংয়ের উদ্ধৃতি দেওয়ার জন্য এড়াতে হবে।

বেশিরভাগ ক্ষেত্রে, আমরা একটি এসকিউএল স্ট্রিং মানের জন্য একক উদ্ধৃতি ব্যবহার করি, সুতরাং আমাদের পিএইচপি স্ট্রিংয়ের জন্য ডাবল উদ্ধৃতি ব্যবহার করা উচিত।

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, 'val1', 'val2')";

এবং আপনি পিএইচপি-র ডাবল-কোটেড স্ট্রিংয়ে একটি ভেরিয়েবল ব্যবহার করতে পারেন:

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, '$val1', '$val2')";

তবে যদি $val1বা $val2এতে একক উদ্ধৃতি থাকে তবে এটি আপনার এসকিউএলকে ভুল করে তুলবে। সুতরাং এটি স্কয়ারে ব্যবহার করার আগে আপনাকে এড়াতে হবে; এটা কি mysql_real_escape_stringজন্য হয়। (যদিও একটি প্রস্তুত বিবৃতি ভাল।)


12

পিএইচপি এবং মাইএসকিউএল এর সংমিশ্রণে, ডাবল কোট এবং একক উদ্ধৃতি আপনার ক্যোয়ারী-লেখার সময়টিকে এত সহজ করে তোলে।

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

এখন, ধরুন আপনি তখন মাইএসকিউএল কোয়েরিতে সরাসরি পোস্ট ভেরিয়েবল ব্যবহার করছেন, এটিকে এভাবে ব্যবহার করুন:

$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (' ".$_POST['id']." ', ' ".$_POST['name']." ', ' ".$_POST['email']." ')";

এটি মাইএসকিউএল-তে পিএইচপি ভেরিয়েবল ব্যবহারের জন্য সেরা অনুশীলন।


সুতরাং ডাবল উদ্ধৃতিগুলি নমনীয় তবে সনাক্তকারী হিসাবে ব্যবহার করা যাবে না।
rhavendc

দয়া করে কখনই সরাসরি আপনার ক্যোয়ারীতে অনস্কেপড ব্যবহারকারীর ইনপুট ব্যবহার করবেন না!
জাঙ্কাল

@jankal এটা ঠিক example.I নিদিষ্ট যে আপনি সরাসরি ব্যবহারকারীর ইনপুট ব্যবহার করছেন তারপর এন তারপর যদি ...........
বিপুল sorathiya

@ ভিপুলসোরথিয়া দয়া করে আপনার উত্তরে উল্লেখ করুন যে পোষ্ট ভেরিয়েবলগুলি এড়ানো উচিত। আপনি এখন আপনার ক্যোয়ারিতে তাদের সরাসরি ব্যবহারের দিকে নির্দেশ করছেন। যারা এটি চেষ্টা করেন তাদের পক্ষে খারাপ ...
আরএফএলদেব

12

এখানে অনেক সহায়ক উত্তর এসেছে, সাধারণত দুটি পয়েন্টে শেষ হয়।

  1. BACKTICKS () সনাক্তকারী নামগুলির আশেপাশে ব্যবহৃত হয়।
  2. একক কোটস (') মানগুলির চারপাশে ব্যবহৃত হয়।

এবং হিসাবে @ মিশেল বারকোভস্কি বলেছেন

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

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

EXAMPLE টি

123E10একটি বৈধ শনাক্তকারী নাম তবে একটি বৈধ INTEGERআক্ষরিক।

[কীভাবে আপনি এই জাতীয় পরিচয়দানকারীর নাম পাবেন তা বিশদে না গিয়ে] ধরুন, আমি নামের একটি অস্থায়ী টেবিল তৈরি করতে চাই 123456e6

ব্যাকটিক্সগুলিতে কোনও ত্রুটি নেই।

DB [XXX]> create temporary table `123456e6` (`id` char (8));
Query OK, 0 rows affected (0.03 sec)

ব্যাকটিক্স ব্যবহার না করার সময় ত্রুটি।

DB [XXX]> create temporary table 123451e6 (`id` char (8));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '123451e6 (`id` char (8))' at line 1

তবে 123451a6এটি একটি পুরোপুরি সূক্ষ্ম সনাক্তকারী নাম (ব্যাক টিক্স ছাড়াই)।

DB [XXX]> create temporary table 123451a6 (`id` char (8));
Query OK, 0 rows affected (0.03 sec)

এটি সম্পূর্ণরূপে কারণ 1234156e6এটি একটি ক্ষতিকারক সংখ্যা।


10

যদি টেবিল কল এবং মানগুলি ভেরিয়েবল হয় তবে দুটি উপায় আছে:

ডাবল উদ্ধৃতি সহ ""সম্পূর্ণ ক্যোয়ারী:

$query = "INSERT INTO $table_name (id, $col1, $col2)
                 VALUES (NULL, '$val1', '$val2')";

অথবা

 $query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")
               VALUES (NULL, '".$val1."', '".$val2."')";

একক উদ্ধৃতি সহ '':

$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')
             VALUES (NULL, '.$val1.', '.$val2.')';

পিছনে টিক্স ব্যবহার করুন ``যখন কোনও কলাম / মান নামটি মাইএসকিউএল সংরক্ষিত কীওয়ার্ডের সাথে সমান হয়।

দ্রষ্টব্য: আপনি যদি কোনও টেবিলের নাম সহ কলামের নামটি বোঝাচ্ছেন তবে ব্যাক টিকগুলি এই জাতীয়ভাবে ব্যবহার করুন:

`table_name``column_name` <- দ্রষ্টব্য: . পিছনের টিকগুলি বাদ দিন ।


8

ভ্যালু () তালিকার মতো স্ট্রিং মানগুলির জন্য একক উদ্ধৃতি ব্যবহার করা উচিত।

ব্যাকটিক্স সাধারণত কোনও শনাক্তকারীকে চিহ্নিত করতে ব্যবহার করা হয় এবং পাশাপাশি দুর্ঘটনাক্রমে সংরক্ষিত কীওয়ার্ডগুলি ব্যবহার করা থেকে নিরাপদ থাকে।

পিএইচপি এবং মাইএসকিউএল এর সংমিশ্রণে, ডাবল কোট এবং একক উদ্ধৃতি আপনার ক্যোয়ারী লেখার সময়টিকে এত সহজ করে তোলে।


4

(ভালভাবে ব্যাখ্যা করা) সমস্ত উত্তর ছাড়াও নিম্নলিখিত উল্লেখ করা হয়নি এবং আমি প্রায়শই এই প্রশ্নোত্তর ঘুরে দেখি।

সংক্ষেপে; মাইএসকিউএল মনে করে যে আপনি তার নিজস্ব টেবিল / কলামে গণিত করতে চান এবং হাইফেনগুলি যেমন "ই-মেল" e বিয়োগ হিসাবে ব্যাখ্যা করেন mail


দাবি অস্বীকার : সুতরাং আমি ভেবেছিলাম যে এটি যারা "ডেটাবেসগুলির সাথে কাজ করার ক্ষেত্রে সম্পূর্ণ নতুন এবং যারা ইতিমধ্যে বর্ণিত প্রযুক্তিগত শর্তগুলি বুঝতে পারে না তাদের জন্য" FYI "ধরণের উত্তর হিসাবে যুক্ত করব।


1

এসকিউএল সার্ভার এবং মাইএসকিউএল, পোস্টগ্রাই এসকিউএল, ওরাকল ডাবল কোট (") বুঝতে পারে না। সুতরাং আপনার প্রশ্নটি ডাবল কোট (") থেকে মুক্ত হওয়া উচিত এবং কেবলমাত্র একক উদ্ধৃতি (') ব্যবহার করা উচিত।

ব্যাক-ট্রিপ (`) এসকিউএল ব্যবহার করার জন্য optionচ্ছিক এবং টেবিলের নাম, ডিবি নাম এবং কলামের নামগুলির জন্য ব্যবহৃত হয়।

আপনি যদি মাইএসকিউএল কল করতে আপনার ব্যাক-এন্ডে কোয়েরি লেখার চেষ্টা করছেন তবে আপনি যেমন ভেরিয়েবলের কাছে কোয়েরি বরাদ্দ করতে ডাবল কোট (") বা একক উদ্ধৃতি (') ব্যবহার করতে পারেন:

let query = "select id, name from accounts";
//Or
let query = 'select id, name from accounts';

যদি whereআপনার ক্যোয়ারীতে থের বক্তব্য থাকে এবং / অথবা insertকোনও মান এবং / অথবা মানটির চেষ্টা করে updateযা এই মানগুলির জন্য একক উদ্ধৃতি (') ব্যবহার করে:

let querySelect = "select id, name from accounts where name = 'John'";
let queryUpdate = "update accounts set name = 'John' where id = 8";
let queryInsert = "insert into accounts(name) values('John')";

//Please not that double quotes are only to be used in assigning string to our variable not in the query
//All these below will generate error

let querySelect = 'select id, name from accounts where name = "John"';
let queryUpdate = 'update accounts set name = "John" where id = 8';
let queryInsert = 'insert into accounts(name) values("John")';

//As MySQL or any SQL doesn't understand double quotes("), these all will generate error.

ডাবল কোট (") এবং একক উদ্ধৃতি (') ব্যবহার করার সময় আপনি যদি এই বিভ্রান্তির বাইরে থাকতে চান তবে একক উদ্ধৃতি (') দিয়ে আটকে রাখার পরামর্শ দিবেন এটিতে ব্যাকস্ল্যাশ () যুক্ত হবে:

let query = 'select is, name from accounts where name = \'John\'';

ডাবল (") বা একক (') উদ্ধৃতিতে সমস্যা দেখা দেয় যখন আমাদের কিছু মান গতিশীল করতে হবে এবং কিছু স্ট্রিং উপসংহার যেমন:

let query = "select id, name from accounts where name = " + fName + " " + lName;
//This will generate error as it must be like name = 'John Smith' for SQL
//However our statement made it like name = John Smith

//In order to resolve such errors use
let query = "select id, name from accounts where name = '" + fName + " " + lName + "'";

//Or using backslash(\)
let query = 'select id, name from accounts where name = \'' + fName + ' ' + lName + '\'';

আরও ছাড়পত্রের প্রয়োজন হলে জাভাস্ক্রিপ্টে কোটস অনুসরণ করুন

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