Fungsi PHP mysql_real_escape_string()

Definisi dan penggunaan

Fungsi mysql_real_escape_string() mengungkap karakter khusus di dalam string yang digunakan dalam pernyataan SQL.

Berikut karakter yang terpengaruh:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

Jika berhasil, fungsi ini mengembalikan string yang diungkap. Jika gagal, mengembalikan false.

Sintaksis

mysql_real_escape_string(string,connection)
Parameter Keterangan
string Wajib. Tentukan string yang harus diungkap.
connection Pilihan. Tentukan koneksi MySQL. Jika tidak ditentukan, maka menggunakan koneksi terakhir.

Keterangan

Fungsi ini akan string dari karakter khusus yang diungkap, dan memperhatikan set karakter yang terhubung saat ini, sehingga dapat digunakan dengan aman mysql_query().

Peringatan dan komentar

Peringatan:Dapat digunakan fungsi ini untuk mencegah serangan database.

Contoh

Contoh 1

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
// Kode untuk mendapatkan nama pengguna dan sandi
// Eksisasi nama pengguna dan sandi, untuk digunakan dalam SQL
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"
// Lebih banyak kode
mysql_close($con);
?>

Contoh 2

Serangan database. Contoh ini menunjukkan apa yang akan terjadi jika kita tidak menerapkan fungsi mysql_real_escape_string() terhadap nama pengguna dan sandi pengguna:

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'"
mysql_query($sql);
// Tidak memeriksa nama pengguna dan sandi
// Bisa berisi apa saja yang diinput pengguna, seperti:
$_POST['user'] = 'john';
$_POST['pwd'] = '" OR ''='"
// Beberapa kode...
mysql_close($con);
?>

Lalu query SQL akan menjadi seperti ini:

SELECT * FROM users
WHERE user='john' AND password='' OR ''=''

Artinya, setiap pengguna tidak perlu memasukkan sandi yang sah untuk masuk.

Contoh 3

Tindakan yang benar untuk mencegah serangan database:

<?php
function check_input($value)
{
// Buang garis bawah
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// Jika bukan angka, tambahkan tanda kutip
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
return $value;
}
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
// Melakukan SQL yang aman
$user = check_input($_POST['user']);
$pwd = check_input($_POST['pwd']);
$sql = "SELECT * FROM users WHERE
user=$user AND password=$pwd";
mysql_query($sql);
mysql_close($con);
?>