рименение mysql_real_escape_string() к каждой переменной, вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является наилучшим вариантом составления запросов и не зависит от установки Magic Quotes.
Запрос, составленный таким образом, будет выполнен без ошибок, и взлом с помощью SQL Injection окажется невозможен.
PHP код:
<?php
// Функция экранирования переменных
function quote_smart($value)
{
// если magic_quotes_gpc включена - используем stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Если переменная - число, то экранировать её не нужно
// если нет - то окружем её кавычками, и экранируем
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
// Соединяемся
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Составляем безопасный запрос
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));
mysql_query($query);
?>
А также класс от меня
PHP код:
<?php
/**
* @author @FATAL@
* @copyright 2008
*/
class DB
{
public function __construct($host, $user, $db_pass, $db)
{
$this->host = $host;
$this->user = $user;
$this->db_pass = $db_pass;
$this->db = $db;
}
public function conn()
{
if(!($this->connect = @mysql_connect($this->host, $this->user, $this->db_pass)))
{
$this->false = 'Connection Error';
return false;
}