13 Februari 2013

Query SQL dengan Tanda Petik (Quote)

Saya pernah menemui suatu kasus saat melakukan query SQL di aplikasi PHP. Ketika itu suatu variabel yang akan dimasukkan (insert) ke dalam field database terdapat tanda petik satu (quote). Secara otomatis hal tersebut akan berdampak pada gagalnya keseluruhan proses insert.

$nama = "Mar'at Afifah";
$query = "insert into namatabel values ('$nama')";
$cmd = sqlsrv_query($conn, $query, $params, $options);

Variabel $query jika diprint akan menjadi seperti ini:
insert into namatabel values ('Mar'at Afifah')

Tentu saja query tersebut akan error, dan berakibat query tersebut tidak dapat berjalan sehingga tidak berhasil dimasukkan ke dalam database.

Ada beberapa solusi untuk permasalahan tersebut, salah satunya adalah dengan mereplace tanda petik satu (') dengan karakter lain. Saya ambilkan contoh, tanda petik satu akan diganti dengan karakter kosong.

$nama = "Mar'at Afifah";
$query = "insert into namatabel values ('$nama')";
$query2 = str_replace(" ' ", " ", $query);
$cmd = sqlsrv_query($conn, $query2, $params, $options);

Hasil dari fungsi diatas adalah variabel $query2 yang akan dimasukkan ke dalam database menjadi:
insert into namatabel values ('Marat Afifah')

Namun, solusi tersebut masih menyisakan masalah, bagaimana mengenali jika nama tersebut ada tanda petiknya? Hal tersebut bisa diganti dengan karakter lain, bukan karakter kosong, misalnya: | atau & atau #.

Tetapi bagaiaman jika menginginkan hasil yang sama di dalam database dengan yang diinputkan? Dan ternyata solusinya adalah SEBAGAI BERIKUT!!

$query2 = str_replace(" ' ", " ' ' ", $query);

ITU DIA, dengan mengganti tanda petik satu dengan tanda petik satu sebanyak 2 kali. Hasil yang akan masuk ke dalam database akan tetap sama dengan tanda petik satu seperti yang diinputkan, yaitu Mar'at Afifah.

SOLVED ~~

8 komentar:

  1. Bukannya malah aman menghindari user input tanda kutip satu, karena membuka celah dari para hacker.. makanya php memblok pengimputan tanda kutip satu untuk menghindari sql injection..

    BalasHapus
    Balasan
    1. oh, i see.. thanks infonya yak ;-)

      Hapus
  2. makasih.. masalah terpecahkan melalui artikel ini :-)

    BalasHapus
  3. .select q'[']'|| last_name ||q'[,]'|| first_name ||q '[ Memiliki Gaji Tahunan Sebesar :]'| |salary*12 ||q'[']' as "Laporan Tahunan Gaji Pegawai"
    from employees;

    kenapa ya temen saya pada bisa tapi pas saya coba nggak bisa gan ? form keyword not found

    BalasHapus
  4. sebelum select nggak pakai titik. disuruh dosen pakai tanda kutip satu gan

    BalasHapus
  5. mas tempat penempatan script di atas dimana?
    di input.php atau connect.php(contoh)
    nb:saya membuat database menngunakan xammp

    BalasHapus

Ayo kirim komentar, disini!!