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.
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
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):
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":
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).
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.
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.,.
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 =)
sumber
'adalah karakter pelarian. Jadi string Anda harus:
Jika Anda menggunakan beberapa kode front-end, Anda perlu melakukan penggantian string sebelum mengirim data ke prosedur tersimpan.
Misalnya, di C # Anda bisa melakukannya
dan kemudian meneruskan nilai ke prosedur tersimpan.
sumber
''
(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
sumber
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):
sumber
Gunakan kode ini:
Ini akan menyelesaikan masalah Anda, karena database tidak dapat mendeteksi karakter khusus dari sebuah string.
sumber
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:
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.
sumber
Anda harus keluar dari karakter khusus menggunakan
\
karakter tersebut.Menjadi:
sumber
Jika Anda ingin menyimpan (') apostrof dalam database gunakan kode di bawah ini
$ new_value dapat disimpan dalam database.
sumber
Anda dapat menggunakan kode ini,
jika mysqli_real_escape_string () tidak berfungsi.
sumber
Di PHP, gunakan mysqli_real_escape_string .
Contoh dari Manual PHP:
sumber
sumber
Jika Anda menggunakan PHP, cukup gunakan fungsi addlashes ().
Addlashes PHP Manual
sumber
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:
sumber
Gunakan addlahes () atau mysql_real_escape_string ().
sumber
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":
Larutan:
Hasil:
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!
sumber
Mungkin Anda bisa melihat fungsi
QUOTE
di manual MySQL.sumber