PHP mysql_real_escape_string() ফাংশন

অর্থ ও ব্যবহার

mysql_real_escape_string() ফাংশন এসকেইপ করে SQL স্ট্রিংয়ের বিশেষ অক্ষরগুলিকে।

এই অক্ষরগুলি প্রভাবিত হয়:

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

সফল হলে, এই ফাংশনটি এসকেইপ করা স্ট্রিং ফিরিয়ে দেয়। ব্যর্থ হলে, false ফিরিয়ে দেয়。

বিবরণ

mysql_real_escape_string(string,connection)
পারামিটার বিবরণ
string বাধ্যতামূলক। এসকেইপ করতে হলে হলো চিহ্নিত স্ট্রিংটি নির্দিষ্ট করুন。
connection বাধ্যতামূলক। সংযোগ নির্দিষ্ট করুন। যদি নির্দিষ্ট না হয়, তবে আগের সংযোগ ব্যবহার করা হবে。

বিবরণ

এই ফাংশনটি string এখানকার বিশেষ অক্ষরগুলির এসকেইপ করা হয়, এবং সংযোগের বর্তমান অক্ষরসমষ্টির কথা মাথায় রেখে, তাই নিরাপদভাবে ব্যবহার করা যায় mysql_query().

সূচনা ও মন্তব্য

সূচনা:এই ফাংশনটি ব্যবহার করে ডাটাবেস হামলা প্রতিরোধ করা যায়。

প্রকল্প

উদাহরণ 1

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
// ব্যবহারকারীর নাম ও পাসওয়ার্ড পাওয়ার কোড
// ব্যবহারকারীর নাম ও পাসওয়ার্ড এসকেইপ করে, SQL-এ ব্যবহারের জন্য
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"
// আরও কোড
mysql_close($con);
?>

উদাহরণ 2

ডাটাবেস হামলা। এই উদাহরণ দেখায় যদি আমরা ব্যবহারকারীর নাম ও পাসওয়ার্ডের জন্য mysql_real_escape_string() ফাংশন লাগাবো না, তবে কি হবে:

<?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);
// ব্যবহারকারীর নাম ও পাসওয়ার্ড নিশ্চিত করবে না
// ব্যবহারকারীর কোনোভাবের নাম বা পাসওয়ার্ড হতে পারে, যেমন:
$_POST['user'] = 'john';
$_POST['pwd'] = '" OR ''='";
// কিছু কোড...
mysql_close($con);
?>

তারপর SQL কোড এইরকম হবে:

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

This means that any user can log in without entering a valid password.

Example 3

Correct way to prevent database attacks:

<?php
function check_input($value)
{
// Remove backslashes
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// If not a number, add quotes
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());
  }
// Perform secure SQL
$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);
?>