ФорумРазработкаБазы данных → mysql(i)?(_real)?_escape_string

mysql(i)?(_real)?_escape_string

  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 21 августа 2008 г. 12:53

    вопрос опять же таки идеологический

    есть класс http://mabp.kiev.ua/content/2008/04/20/request/
    я в очередном парыве оптимизации решил заменить один из фильтров оттуда


    private function _is_SLU($value){
    $this->value = str_replace(array("\\","\"","'","(",")","%","<",">","{","}","/","&","+"), '', $value);
    }

    он чесно говоря популярностью не пользуеться да и смысла я в нем не вижу особого (у когото содрал), предположительная его функцию сейчас выполняет mysql_real_escape_string которой при написании первых версий класса еще не было

    вот собственно вопрос поскольку передать идентификатор соединения в функцию нельзя есть два варианта


    private function _is_SQL($value){
    // @ гасит ошибку если нет соединения с БД
    $this->value = @mysql_real_escape_string($value);
    }


    при этом варианте возможно два развития событий
    1 cсоединенеи с БД еще не было установлено и функция вернет false
    2 функция будет использовать последние открыое соединение

    обе ситауции мне не подходят так как при первой я вообще потеряю инфу а при второй я могу промахнуться и отэкранирую например для мсскул а засуну в мускул


    private function _is_SQL($value){
    $this->value = mysql_escape_string($value);
    }

    результат вообще мне не нравиться така как не зависит от БД

    варианты addslashes и использования встроеных возможностей DBAL типа


    $stmt = $adodb->Prepare("SELECT * FROM table WHERE id = ?");
    $adodb->Execute($stmt, array($id));


    не рассматриваються

Пожалуйста, авторизуйтесь, чтобы написать комментарий!