Cara keluar dari tanda kutip tunggal di MySQL


Jawaban:


126

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 =)


9
Anda mungkin ingin memperbarui posting Anda untuk menyertakan mysql_real_escape_string () atau addlashes () sebagai solusi yang mungkin ... seperti di salah satu komentar di bawah ini, OP menyatakan bahwa mereka hanya membaca dari file dan menyisipkan.
James B

3
Metode mysql_ * tidak direkomendasikan untuk penggunaan di masa mendatang, karena sudah usang .
hd1

Itu adalah jawaban yang benar, meskipun akhir-akhir ini pilihan terbaik adalah menggunakan salah satu
Ryan

10

'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.


Saya tidak memasukkan data secara manual, saya mengekstraknya dari File, dan akan ada vaklues: Pena Ashok. Bagaimana cara memasukkannya. membuat prosedur untuk melakukan ini .. bagaimana membuatnya benar.
Ashok Gupta

FWIW minor nit: backslash adalah "karakter melarikan diri"; ''(dua tanda kutip tunggal) adalah alternatif khusus yang diperbolehkan untuk "menyela" karakter tanda kutip tunggal.
ToolmakerSteve

9

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


1
Saya tidak memasukkan data secara manual, saya mengekstraknya dari File, dan akan ada nilai: pena Ashok. Bagaimana cara memasukkannya. membuat prosedur untuk melakukan ini .. bagaimana membuatnya benar.
Ashok Gupta

Sekadar catatan 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.,.
NewBee

7

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();

7

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.


1
Sekadar catatan 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.,.
NewBee

6

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:

  1. Pengkodean Base64 adalah pengkodean biner , jadi Anda sebaiknya memastikan bahwa Anda mengatur karakter dengan benar ketika Anda melakukan pengkodean, karena MySQL akan mendekode string yang dikodekan Base64 menjadi byte dan kemudian menafsirkannya. Pastikan base64dan MySQL setuju tentang apa itu pengkodean karakter (saya merekomendasikan UTF-8).
  2. Saya telah membungkus string menjadi 50 kolom agar terbaca di Stack Overflow. Anda dapat membungkusnya ke sejumlah kolom yang Anda inginkan (atau tidak membungkusnya sama sekali) dan itu akan tetap berfungsi.

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.


5

Anda harus keluar dari karakter khusus menggunakan \karakter tersebut.

This is Ashok's Pen.

Menjadi:

This is Ashok\'s Pen.

3

Jika Anda ingin menyimpan (') apostrof dalam database gunakan kode di bawah ini

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

$ new_value dapat disimpan dalam database.


3

Anda dapat menggunakan kode ini,

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

jika mysqli_real_escape_string () tidak berfungsi.


3

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);
?>



0

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)); 

0

Gunakan addlahes () atau mysql_real_escape_string ().


Sekadar catatan 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.,.
NewBee

Yup, perlu menambahkan i sekarang mysqli_real_escape_string php.net/manual/en/mysqli.real-escape-string.php
Anthony

Akan lebih baik untuk memperbarui jawaban Anda (mis. Komentar dapat hilang kapan saja).
Peter Mortensen

0

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!


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.