মাইএসকিউএল-এ কীভাবে একক উদ্ধৃতি থেকে বাঁচবেন


100

আমি মাইএসকিউএলে এমন কোনও মান কীভাবে সন্নিবেশ করব যা একক বা ডাবল উদ্ধৃতি সমন্বিত থাকে। অর্থাত্

This is Ashok's Pen.

একক উদ্ধৃতি সমস্যা তৈরি করবে। অন্যান্য পালানোর অক্ষর থাকতে পারে।

আপনি কীভাবে তথ্য সঠিকভাবে সন্নিবেশ করবেন?


উত্তর:


129

বেশ সহজভাবে লিখুন:

SELECT 'This is Ashok''s Pen.';

সুতরাং স্ট্রিংয়ের ভিতরে, প্রতিটি একক উদ্ধৃতি তাদের দুটি দিয়ে প্রতিস্থাপন করুন।

বা:

SELECT 'This is Ashok\'s Pen.'

এটি এড়িয়ে চলুন =)


9
সম্ভাব্য সমাধান হিসাবে mysql_real_escape_string () বা অ্যাডল্যাশস () যুক্ত করার জন্য আপনি নিজের পোস্টটি আপডেট করতে চাইতে পারেন ... নীচের একটি মন্তব্যে, ওপিতে বলা হয়েছে যে তারা কেবল ফাইল থেকে পড়ছে এবং সন্নিবেশ করছে।
জেমস বি

4
Mysql_ * পদ্ধতিগুলি ভবিষ্যতে ব্যবহারের জন্য প্রস্তাবিত নয়, কারণ এটি হ্রাস করা হয়েছে
এইচডি 1

এটি সঠিক উত্তর, যদিও এই দিনগুলির সেরা বিকল্পটি হল
রায়ান

এটা আমার জন্য কাজ করা হয়। অনেক অনেক ধন্যবাদ
আরিফুল ইসলাম

10

'পলায়ন চরিত্র। সুতরাং আপনার স্ট্রিংটি হওয়া উচিত:

এটি অশোকের কলম

আপনি যদি কিছু ফ্রন্ট-এন্ড কোড ব্যবহার করছেন তবে সঞ্চিত পদ্ধতিতে ডেটা প্রেরণের আগে আপনাকে স্ট্রিং প্রতিস্থাপন করতে হবে।

উদাহরণস্বরূপ, সি # তে আপনি করতে পারেন

value = value.Replace("'", "''");

এবং তারপরে সঞ্চিত পদ্ধতিতে মান পাস করুন।


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

এফডাব্লুআইডাব্লু মাইনর নাইট: ব্যাকস্ল্যাশ হ'ল "পালানোর চরিত্র"; ''(দুটি একক উদ্ধৃতি) একটি একক-উদ্ধৃতি চরিত্র "পালানোর" জন্য অনুমোদিত একটি বিশেষ বিকল্প।
স্টিভ

9

"মাইএসকিউএল-এর অক্ষরগুলি কীভাবে এড়াতে হবে " এ আমার উত্তর দেখুন

আপনি মাইএসকিউএল এর সাথে কথা বলার জন্য যে লাইব্রেরি ব্যবহার করছেন তাতে একটি বেঁচে থাকার ফাংশন থাকবে, যেমন পিএইচপিতে আপনি mysqli_real_escape_string বা PDO :: উদ্ধৃতি ব্যবহার করতে পারেন


4
আমি ম্যানুয়ালি ডেটা notোকাচ্ছি না, আমি ফাইল থেকে এটি বের করি এবং মানগুলি থাকবে: অশোকের কলম। এটি কীভাবে .োকানো যায়। এটি করার জন্য একটি পদ্ধতি তৈরি করেছে .. কীভাবে এটি সঠিক করা যায়।
অশোক গুপ্ত

শুধু একটি নোট This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.,।
নিউবি

7

যদি আপনি প্রস্তুত বিবৃতি ব্যবহার করেন, ড্রাইভার কোনও পালানো পরিচালনা করবে। উদাহরণস্বরূপ (জাভা):

Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
    prepped.setString(1, line);
    prepped.executeQuery();
}
conn.commit();
conn.close();

7

এই কোডটি ব্যবহার করুন:

<?php
    $var = "This is Ashok's Pen.";

    mysql_real_escape_string($var);
?>

এটি আপনার সমস্যার সমাধান করবে, কারণ ডাটাবেস কোনও স্ট্রিংয়ের বিশেষ অক্ষরগুলি সনাক্ত করতে পারে না।


4
শুধু একটি নোট This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.,।
নিউবি

6

এটি করার আরও একটি উপায় আছে যা আপনার দৃষ্টিভঙ্গির উপর নির্ভর করে নিরাপদ বা নাও হতে পারে। এটা তোলে মাইএসকিউএল 5.6 বা পরবর্তী একটি নির্দিষ্ট স্ট্রিং ফাংশন ব্যবহারের কারণ প্রয়োজন: FROM_BASE64

ধরা যাক আপনি এই বার্তাটি sertোকাতে চান:

"আহ," প্রায় হেডলেস নিক একটি মার্জিত হাতটি দুলালেন, "কোন গুরুত্বের বিষয় নয় ... ... আমি সত্যিই যোগ দিতে চাইনি বলে মনে হয় না। ... ভেবেছিলাম আমি আবেদন করতাম, তবে দৃশ্যত আমি প্রয়োজনীয়তা পূরণ করি না" '- "

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

পরিবর্তে, আপনি পাঠ্যটি বেস 64-এনকোড করতে পারেন, সুতরাং আপনার কাছে একটি "পরিষ্কার" স্ট্রিং রয়েছে:

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K

বেস 64-এনকোডিং সম্পর্কে কিছু নোট:

  1. বেস 64-এনকোডিং একটি বাইনারি এনকোডিং , সুতরাং আপনি এনকোডিং করার সময় আপনার চরিত্রটি সঠিকভাবে স্থাপন করার বিষয়টি আরও ভালভাবে নিশ্চিত করতে হবে, কারণ মাইএসকিউএল বেস 64-এনকোড স্ট্রিংটিকে বাইটে ডিকোড করবে এবং তারপরে সেগুলি ব্যাখ্যা করবে। নিশ্চিত base64হন এবং মাইএসকিউএল অক্ষর এনকোডিং কী তা নিয়ে একমত (আমি ইউটিএফ -8 প্রস্তাব দিই)।
  2. স্ট্যাক ওভারফ্লোতে পঠনযোগ্যতার জন্য আমি স্ট্রিংটি 50 টি কলামে আবৃত করেছি। আপনি এটি যে কোনও কলামগুলিতে চান তা মোড়ানো করতে পারেন (বা মোটেও মোড়ানো নয়) এবং এটি এখনও কাজ করবে।

এখন, এটি মাইএসকিউএল এ লোড করতে:

INSERT INTO my_table (text) VALUES (FROM_BASE64(' SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K '));

এটি কোনও অভিযোগ ছাড়াই sertোকানো হবে এবং স্ট্রিংয়ের ভিতরে আপনাকে কোনও পাঠ্য ম্যানুয়ালি-এড়িয়ে যেতে হবে না।


5

চরিত্রটি ব্যবহার করে আপনার বিশেষ অক্ষরগুলি থেকে বাঁচা উচিত \

This is Ashok's Pen.

হয়ে:

This is Ashok\'s Pen.

3

আপনি এই কোডটি ব্যবহার করতে পারেন,

<?php
     $var = "This is Ashok's Pen.";
     addslashes($var);
?>

যদি mysqli_real_escape_string () কাজ না করে।


3

পিএইচপি-তে, mysqli_real_escape_string ব্যবহার করুন

পিএইচপি ম্যানুয়াল থেকে উদাহরণ:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("Error: %s\n", mysqli_sqlstate($link));
}

$city = mysqli_real_escape_string($link, $city);

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>

3

আপনি যদি (')ডাটাবেসে অ্যাডাস্ট্রোফ রাখতে চান তবে নীচের কোডটি ব্যবহার করুন:

$new_value = str_replace("'","\'", $value); 

$new_value ডাটাবেসে সংরক্ষণ করতে পারেন।




0

প্রোগ্রামেটিক অ্যাক্সেসের জন্য, আপনি স্থানধারক ব্যবহার করতে পারেন জন্য স্বয়ংক্রিয়ভাবে অনিরাপদ অক্ষরগুলি থেকে বাঁচতে ।

পার্ল ডিবিআইতে, উদাহরণস্বরূপ, আপনি এটি ব্যবহার করতে পারেন:

my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string)); 

0

হয় অ্যাডল্লেস () অথবা মাইএসকিএল_আরাল_সেস্কেপ_স্ট্রিং () ব্যবহার করুন।


শুধু একটি নোট This, mysql_real_escape_string() extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.,।
নিউবি

হ্যাঁ, আমি এখনই মাইসকিলি_রিয়াল_সেসকেপ_ স্ট্রিং php.net/manual/en/mysqli.real-escape-string.php
অ্যান্টনি

আপনার উত্তর আপডেট করা ভাল (উদাহরণস্বরূপ মন্তব্য যে কোনও সময় অদৃশ্য হয়ে যেতে পারে)।
পিটার মর্টেনসেন

0

আমি যেভাবে করি, ডেলফি ব্যবহার করে:

স্ট্রিং "পালাতে":

TheString=" bla bla bla 'em some more apo:S 'em and so on ";

সমাধান:

StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);

ফলাফল:

TheString=" bla bla bla \'em some more apo:S \'em and so on ";

এই ফাংশনটি আপনাকে কোনও সমস্যা ছাড়াই মাইএসকিউএলে পাঠ্য ক্ষেত্রগুলি সন্নিবেশ করানো বা আপডেট করার অনুমতি দিয়ে "\" "দিয়ে সমস্ত চর (39) প্রতিস্থাপন করবে।

সমস্ত প্রোগ্রামিং ভাষায় অনুরূপ ফাংশন পাওয়া যায়!


0

হতে পারে আপনি QUOTEমাইএসকিউএল ম্যানুয়ালটিতে ফাংশনটি একবার দেখে নিতে পারেন ।

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