Melarikan diri dari string berarti mengurangi ambiguitas dalam tanda kutip (dan karakter lain) yang digunakan dalam string itu. Misalnya, saat Anda mendefinisikan string, Anda biasanya mengapitnya dengan tanda kutip ganda atau tanda kutip tunggal:
"Hello World."
Tetapi bagaimana jika string saya memiliki tanda kutip ganda di dalamnya?
"Hello "World.""
Sekarang saya memiliki ambiguitas - penerjemah tidak tahu di mana string saya berakhir. Jika saya ingin menyimpan tanda kutip ganda saya, saya memiliki beberapa pilihan. Saya bisa menggunakan tanda kutip tunggal di sekitar string saya:
'Hello "World."'
Atau saya dapat menghindari kutipan saya:
"Hello \"World.\""
Setiap kutipan yang didahului oleh garis miring diloloskan , dan dipahami sebagai bagian dari nilai string.
Ketika datang ke kueri, MySQL memiliki kata kunci tertentu yang diperhatikannya yang tidak dapat kami gunakan dalam kueri kami tanpa menyebabkan kebingungan. Misalkan kita memiliki tabel nilai di mana kolom bernama "Pilih", dan kita ingin memilihnya:
SELECT select FROM myTable
Kami sekarang telah memperkenalkan beberapa ambiguitas ke dalam kueri kami. Dalam kueri kami, kami dapat mengurangi ambiguitas itu dengan menggunakan tanda centang kembali:
SELECT `select` FROM myTable
Ini menghilangkan kebingungan yang telah kami perkenalkan dengan menggunakan penilaian yang buruk dalam memilih nama bidang.
Banyak dari ini dapat ditangani untuk Anda hanya dengan meneruskan nilai Anda melalui mysql_real_escape_string()
. Pada contoh di bawah ini Anda dapat melihat bahwa kami meneruskan data yang dikirimkan pengguna melalui fungsi ini untuk memastikannya tidak akan menyebabkan masalah untuk kueri kami:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Ada metode lain untuk keluar dari string, seperti add_slashes
, addcslashes
, quotemeta
, dan lebih banyak lagi, meskipun Anda akan menemukan bahwa ketika tujuannya adalah untuk menjalankan kueri yang aman, pada umumnya pengembang besar lebih memilih mysql_real_escape_string
atau pg_escape_string
(dalam konteks PostgreSQL.