Bagaimana cara memasukkan nilai di MySQL yang terdiri dari tanda kutip tunggal atau ganda. yaitu
This is Ashok's Pen.
Kutipan tunggal akan menimbulkan masalah. Mungkin ada karakter pelarian lainnya.
Bagaimana Anda memasukkan data dengan benar?
Bagaimana cara memasukkan nilai di MySQL yang terdiri dari tanda kutip tunggal atau ganda. yaitu
This is Ashok's Pen.
Kutipan tunggal akan menimbulkan masalah. Mungkin ada karakter pelarian lainnya.
Bagaimana Anda memasukkan data dengan benar?
Jawaban:
Sederhananya:
SELECT 'This is Ashok''s Pen.';
Jadi di dalam string, ganti setiap kutipan dengan dua di antaranya.
Atau:
SELECT 'This is Ashok\'s Pen.'
Escape itu =)
'adalah karakter pelarian. Jadi string Anda harus:
Ini Pena Ashok
Jika Anda menggunakan beberapa kode front-end, Anda perlu melakukan penggantian string sebelum mengirim data ke prosedur tersimpan.
Misalnya, di C # Anda bisa melakukannya
value = value.Replace("'", "''");
dan kemudian meneruskan nilai ke prosedur tersimpan.
''
(dua tanda kutip tunggal) adalah alternatif khusus yang diperbolehkan untuk "menyela" karakter tanda kutip tunggal.
Lihat jawaban saya untuk "Cara keluar dari karakter di MySQL"
Perpustakaan apa pun yang Anda gunakan untuk berbicara dengan MySQL akan memiliki fungsi pelolosan bawaan, misalnya dalam PHP Anda dapat menggunakan mysqli_real_escape_string atau PDO :: quote
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.
,.
Jika Anda menggunakan pernyataan yang sudah disiapkan, driver akan menangani pelarian apa pun. Misalnya (Java):
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();
Gunakan kode ini:
<?php
$var = "This is Ashok's Pen.";
mysql_real_escape_string($var);
?>
Ini akan menyelesaikan masalah Anda, karena database tidak dapat mendeteksi karakter khusus dari sebuah string.
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.
,.
Ada cara lain untuk melakukan ini yang mungkin lebih aman atau tidak, tergantung pada perspektif Anda. Hal ini membutuhkan MySQL 5.6 atau kemudian karena penggunaan fungsi string tertentu: FROM_BASE64
.
Katakanlah Anda memiliki pesan ini yang ingin Anda masukkan:
"Ah," Nick si Kepala-Nyaris-Putus melambai dengan anggun, "hal yang tidak penting ... Bukannya aku benar-benar ingin bergabung ... Kupikir aku akan melamar, tapi ternyata aku 'tidak memenuhi persyaratan '- "
Kutipan itu memiliki banyak tanda kutip tunggal dan ganda dan akan sangat merepotkan untuk dimasukkan ke dalam MySQL. Jika Anda memasukkannya dari program, mudah untuk melepaskan tanda kutip, dll. Tetapi, jika Anda harus memasukkannya ke dalam skrip SQL, Anda harus mengedit teks (untuk menghindari tanda kutip) yang mungkin rawan kesalahan atau sensitif terhadap pembungkusan kata, dll.
Sebaliknya, Anda dapat menyandikan teks Base64, sehingga Anda memiliki string "bersih":
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
Beberapa catatan tentang pengkodean Base64:
base64
dan MySQL setuju tentang apa itu pengkodean karakter (saya merekomendasikan UTF-8).Sekarang, untuk memuat ini ke MySQL:
INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
Ini akan dimasukkan tanpa keluhan apa pun, dan Anda tidak perlu keluar dari teks secara manual di dalam string.
Jika Anda ingin menyimpan (') apostrof dalam database gunakan kode di bawah ini
$new_value = str_replace("'","\'", $value);
$ new_value dapat disimpan dalam database.
Di PHP, gunakan mysqli_real_escape_string .
Contoh dari Manual 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']);
Jika Anda menggunakan PHP, cukup gunakan fungsi addlashes ().
Untuk akses terprogram, Anda dapat menggunakan placeholder untuk secara otomatis keluar dari karakter yang tidak aman untuk Anda.
Di Perl DBI, misalnya, Anda dapat menggunakan:
my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string));
Gunakan addlahes () atau 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.
,.
Cara saya melakukannya, dengan menggunakan Delphi:
TheString untuk "melarikan diri":
TheString=" bla bla bla 'em some more apo:S 'em and so on ";
Larutan:
StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);
Hasil:
TheString=" bla bla bla \'em some more apo:S \'em and so on ";
Fungsi ini akan menggantikan semua Char (39) dengan "\ '" yang memungkinkan Anda untuk memasukkan atau memperbarui kolom teks di MySQL tanpa masalah.
Fungsi serupa ditemukan di semua bahasa pemrograman!