मैं MySQL में एक मूल्य कैसे सम्मिलित करूं जिसमें सिंगल या डबल कोट्स हों। अर्थात
This is Ashok's Pen.
एकल उद्धरण समस्या पैदा करेगा। भागने के अन्य पात्र हो सकते हैं।
आप सही तरीके से डेटा कैसे डालते हैं?
मैं MySQL में एक मूल्य कैसे सम्मिलित करूं जिसमें सिंगल या डबल कोट्स हों। अर्थात
This is Ashok's Pen.
एकल उद्धरण समस्या पैदा करेगा। भागने के अन्य पात्र हो सकते हैं।
आप सही तरीके से डेटा कैसे डालते हैं?
जवाबों:
काफी सीधे शब्दों में कहें:
SELECT 'This is Ashok''s Pen.';
इसलिए स्ट्रिंग के अंदर, प्रत्येक एकल उद्धरण को उनमें से दो के साथ बदलें।
या:
SELECT 'This is Ashok\'s Pen.'
इससे बचिए =)
'पलायन चरित्र है। तो आपका तार होना चाहिए:
यह अशोक की कलम है
यदि आप कुछ फ्रंट-एंड कोड का उपयोग कर रहे हैं, तो आपको संग्रहीत प्रक्रिया में डेटा भेजने से पहले एक स्ट्रिंग को प्रतिस्थापित करने की आवश्यकता है।
उदाहरण के लिए, C # में आप कर सकते हैं
value = value.Replace("'", "''");
और फिर संग्रहीत कार्यविधि के लिए मान पास करें।
''
(दो एकल उद्धरण) एक एकल-उद्धरण चरित्र "भागने" के लिए एक विशेष विकल्प है।
"MySQL में पात्रों से कैसे बचें" मेरा उत्तर देखें
जो भी लाइब्रेरी आप MySQL से बात करने के लिए उपयोग कर रहे हैं, उसमें एक एस्केपिंग फंक्शन होगा, जैसे कि PHP में आप mysqli_real_escape_string या PDO :: उद्धरण का उपयोग कर सकते हैं
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.
।
यदि आप तैयार किए गए कथनों का उपयोग करते हैं, तो चालक किसी भी भागने से बचाएगा। उदाहरण के लिए (जावा):
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();
इस कोड का उपयोग करें:
<?php
$var = "This is Ashok's Pen.";
mysql_real_escape_string($var);
?>
यह आपकी समस्या का समाधान करेगा, क्योंकि डेटाबेस स्ट्रिंग के विशेष वर्णों का पता नहीं लगा सकता है।
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.
।
ऐसा करने का एक और तरीका है जो आपके दृष्टिकोण के आधार पर सुरक्षित हो सकता है या नहीं भी हो सकता है। यह एक विशिष्ट स्ट्रिंग फ़ंक्शन के उपयोग के कारण MySQL 5.6 या बाद के संस्करण की आवश्यकता है FROM_BASE64
:।
मान लें कि आपके पास यह संदेश है जिसे आप सम्मिलित करना चाहते हैं:
"आह," लगभग हेडलेस निक ने एक सुरुचिपूर्ण हाथ लहराया, "कोई महत्व की बात नहीं है।"। यह ऐसा नहीं है कि मैं वास्तव में शामिल होना चाहता था। सोचा था कि मैं आवेदन करूंगा, लेकिन जाहिर है मैं आवश्यकताओं को पूरा नहीं करता। '- "
उस उद्धरण में सिंगल और डबल-कोट्स का एक समूह है और MySQL में डालने के लिए एक वास्तविक दर्द होगा। यदि आप उस प्रोग्राम से इंसर्ट कर रहे हैं, तो कोट्स वगैरह से बचना आसान है, लेकिन, अगर आपको उसे एसक्यूएल स्क्रिप्ट में डालना है, तो आपको टेक्स्ट को (उद्धरणों से बचने के लिए) एडिट करना होगा, जिसमें त्रुटि हो सकती है या शब्द-रैपिंग आदि के प्रति संवेदनशील।
इसके बजाय, आप टेक्स्ट को बेस-एनकोड कर सकते हैं, इसलिए आपके पास "क्लीन" स्ट्रिंग है:
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
बेस 64-एन्कोडिंग के बारे में कुछ नोट:
base64
और MySQL इस बात पर सहमत है कि चरित्र एन्कोडिंग क्या है (मैं UTF-8 की सिफारिश करता हूं)।अब, इसे MySQL में लोड करने के लिए:
INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
यह बिना किसी शिकायत के सम्मिलित होगा, और आपको स्ट्रिंग के अंदर किसी भी पाठ को मैन्युअल रूप से बचाना नहीं था।
PHP में, mysqli_real_escape_string का उपयोग करें ।
PHP मैनुअल से उदाहरण:
<?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);
?>
$var = mysqli_real_escape_string($conn, $_POST['varfield']);
यदि आप PHP का उपयोग कर रहे हैं, तो Addlashes () फ़ंक्शन का उपयोग करें।
प्रोग्रामेटिक एक्सेस के लिए, आप प्लेसहोल्डर्स का उपयोग कर सकते हैं का करके आपके लिए असुरक्षित वर्णों से स्वचालित रूप से बच सकते हैं।
उदाहरण के लिए, पर्ल डीबीआई में, आप उपयोग कर सकते हैं:
my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string));
Addlahes () या mysql_real_escape_string () का उपयोग करें।
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.
।
डेल्फी का उपयोग करके मैं जिस तरह से करता हूं:
"भागने" के लिए स्ट्रिंग:
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) को "\" के साथ बदल देगा, जिससे आप बिना किसी समस्या के MySQL में टेक्स्ट फ़ील्ड सम्मिलित या अपडेट कर सकते हैं।
सभी प्रोग्रामिंग भाषाओं में समान कार्य पाए जाते हैं!