[Ищу] Класс для работы с MySQL

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Поделитесь, пожалуйста, кто какими классами работает с MySQL, при написании своих супер-крутых скриптов.
Дабы максимально не допустить SQL inj ))

Спасибо.
 
MySQLi, не?)
 
юзаю или фреймворк, там как правило все уже подчищается...
либо использую mysql.class из dle... уж очень он мне понравился
 
Здравствуйте.
Поделитесь, пожалуйста, кто какими классами работает с MySQL, при написании своих супер-крутых скриптов.
Дабы максимально не допустить SQL inj ))

Спасибо.
Мой класс:
PHP:
// Debug on/off
define("DEBUG",0);

// SQL counter
$query_counter=0;

/**
* MySQL database working class
*
*/
class MySQLDB {
   private static $instance;
   private $db_config;
   public $connection;

   public static function connect()   {
     if (!isset(self::$instance)) {
       $c =__CLASS__;
       self::$instance=new $c;
     }
     return self::$instance;
   }

   public function __clone() {
     trigger_error('Cloning not allowed.', E_USER_ERROR);
   }

   public function __wakeup() {
     trigger_error('Cloning not allowed.', E_USER_ERROR);
   }

   private function __construct()   {
     try   {
       if(!($this->db_config = parse_ini_file('config/mysql.ini')))   {
         throw new Exception('Cannot load mysqli configuration: ' . __FILE__ . ' ' . __LINE__);
       }    
       $this->connection=new mysqli($this->db_config['server'], $this->db_config['username'], $this->db_config['password'], $this->db_config['db']);
       if (mysqli_connect_error())   {
         throw new Exception('Database error: ' . mysqli_connect_error());
       }
     }
     catch( Exception $e ) {
       print $e->getMessage().'<br />';
     }
     $this->connection->set_charset('utf8');
   }

   function query($query='') {
     global $query_counter;
     if(DEBUG) print '<br /> Query : '.$query.'<br/>';
     $result = mysqli_query($this->connection,$query) or die('Error  [query]: <br />'.mysqli_error($mysqldb->connection).'<br /> Query :<br/>'.$query);
     $query_counter++;
     return $result;
   }

   function __destruct() {
     $this->connection->close();
   }
}




/**
* Returns cutted down entry data
*
* @param string $data
* @param int $mode
* @return string
*/
function vf($data,$mode=0) {
   switch ($mode)   {
     case 1:
       return preg_replace("/[^a-z0-9A-Z]+/",'',$data); // числа, буквы
       break;
     case 2:
       return preg_replace("/[^a-zA-Z]+/",'',$data); // буквы
       break;
     case 3:
       return preg_replace("/[^0-9]+/",'',$data); // числа
       break;
     case 4:
       return preg_replace("/[^a-z0-9A-Z\-_\.]+/",'',$data); // числа, буквы, тире, прочерк, точка
       break;
     case 5:
       return preg_replace("/[^ [:punct:]".('a-zA-Z')."0-9]+/",'',$data); // соотв. текущему языку алфавит + цифры и знаки препинания
       break;
     case 'in':
       return preg_replace("~\A[^0-9]+|[^0-9,]+|,[^0-9]*(?=,)|[^0-9]+\Z~",'',$data); // числа, запятые для "SELECT * FROM `table` WHERE `key` IN ($data)"
       break;
     default:
       return preg_replace("/[~@\+\?\%\/\;=\*\>\<\"\'\-]+/",'',$data); // блек-лист в крайнем случае.
       break;
   }
}
Вызывается с помощью $mysqldb = MySQLDB::connect();
Но грузится 1 раз, даже если вызван несколько, т.к. синглтон.
Это основа, ещё есть вспомогательные функции для быстрой работы.
 
Последнее редактирование:
private function __construct() {
try {
if(!(
$this->db_config = parse_ini_file('config/mysql.ini'))) {

У меня вопрос по безопасности.
Выходит любой желающий, если знает где хранится файл mysql.ini, спокойно открывает файл через браузер и получает пароль от базы???

можно как то ограничить доступ к файлу только для определенных файлов, например открыть доступ на чтение только для корневого файла index.php????
 
У меня вопрос по безопасности.
Выходит любой желающий, если знает где хранится файл mysql.ini, спокойно открывает файл через браузер и получает пароль от базы???

можно как то ограничить доступ к файлу только для определенных файлов, например открыть доступ на чтение только для корневого файла index.php????
что мешает вообще от файла отказаться?
 
что мешает вообще от файла отказаться?
Предложите свой вариант без использования файла конфига с доступами к базе данных.
Я таковых способов не знаю.

Здравствуйте.
Поделитесь, пожалуйста, кто какими классами работает с MySQL, при написании своих супер-крутых скриптов.
Дабы максимально не допустить SQL inj ))
Спасибо.
регулярки - самый легкий способ фильтрации запросов в базу данных.
Другие способы геморные для меня и мне показались мало эффективными.
+ проверка наличия глобальной переменной $_GET
Если переменная существует - редирект на url без GET запроса через header и exit.

Был бы хоть 1 норм способ, уже кто то, да поделился бы.

Не понимаю чем могут помочь классы работы с базой данных, в плане защиты от инъекций.
что мешает вообще от файла отказаться?

наведите хоть 1 пример без использования файла конфигов подключения к базе данных.
 
Последнее редактирование:
Предложите свой вариант без использования файла конфига с доступами к базе данных.
Я таковых способов не знаю.
файл с конфигом вам нужен только для того что бы определить значение вот этих переменных
PHP:
$this->db_config['server']
$this->db_config['username']
$this->db_config['password']
$this->db_config['db']

но вам ничто не мешает определить их самим
 
Назад
Сверху