Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте кот(оберька для MySQL)! / 25 сообщений из 133, страница 1 из 6
07.05.2012, 15:45:32
    #37785279
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    public function buildSelectQuery($table, $cols, $where, $limit, $order, $group) {      
        return "SELECT $cols FROM {$this->prefix}$table" . 
               ($where ? " WHERE $where" : '') .
               ($group ? " GROUP BY $group" : '') .
               ($order ? " ORDER BY $order" : '') . 
               ($limit ? " LIMIT $limit" : '') . ';'; 
    }

    public function select($table, $cols = '*', $where = null) {
        $query = $this->buildSelectQuery($table, $cols, $where);
        $result = $this->query($query);
        return $this->fetch($result);
    }
    
    public function find($table, $id, $cols = '*') {
        return $this->select($table, $cols, 'id = ' . intval($id));
    }
    
    public function selectAll($table, $cols = '*', $where = null, $limit = null, $order = null, $group = null) {
        $query = $this->buildSelectQuery($table, $cols, $where, $limit, $order, $group);
        $result = $this->query($query);
        return $this->fetchAll($result);
    }
    
    public function search($table, $cols, $key_col, $text, $limit = null, $order = null) {
        return $this->selectAll($table, $cols, "$key_col LIKE '%" . $this->escapeLike($text) . "%'", $limit, $order);
    }
    
    public function fullTextSearch($table, $cols, $match_cols, $text, $limit = null, $order = null) {
        return $this->selectAll($table, $cols, "MATCH ($match_cols) AGAINST (" . $this->quote($text) . ')', $limit, $order);
    }
...
Рейтинг: 0 / 0
07.05.2012, 15:47:34
    #37785282
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
/**
     * Получить значения из таблицы как ассоциативный массив.
     */
    public function assoc($table, $key_field, $value_field, $where = null) {
        $result = $this->query($this->buildSelectQuery($table, "$key_field, $value_field", $where));
        $keys = $this->fetchCol($result, $key_field);
        if (empty($keys)) {
            return $keys;
        }
        $this->seek($result); // сбросили указатель
        $values = $this->fetchCol($result, $value_field);
        return array_combine($keys, $values);
    }
    
    public function assocId($table, $field, $where = null) {
        return $this->assoc($table, 'id', $field, $where);
    }

    /**
     * Посчитать количество рядов в таблице.
     */
    public function count($table, $field, $where = null) {
        $result = $this->query($this->buildSelectQuery($table, "COUNT($field)", $where));
        return (int) $this->single($result);
    }
    
    /**
     * Посчитать количество всех рядов в таблице.
     */
    public function countAll($table, $where = null) {
        return $this->count($table, '*', $where);
    }
    
    /**
     * Посчитать количество рядов с уникальными значениями стобца $field в таблице.
     */
    public function countUnique($table, $field, $where = null) {
        return $this->count($table, "DISTINCT $field", $where);
    }
...
Рейтинг: 0 / 0
07.05.2012, 15:49:31
    #37785286
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
К чему все это?
Хоть бы мало-мальское экранирование/проверки сделали. Иначе при любых отклонениях во входных данных - либо ошибка синтаксиса, либо SQL-инъекция, либо непредсказуемое поведение.
...
Рейтинг: 0 / 0
07.05.2012, 15:50:01
    #37785288
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoft, $this->quote($text)
...
Рейтинг: 0 / 0
07.05.2012, 15:50:44
    #37785290
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public function quote($string) {
        return "'" . $this->escape($string) . "'";
    }
    
    public function escapeLike($string) {
        $string = $this->escape($string);
        $string = str_replace(array('%', '_'), array('\%', '\_'), $string);
        return $string;
    }  
...
Рейтинг: 0 / 0
07.05.2012, 15:52:32
    #37785293
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Няша рррmiksoft, $this->quote($text)И что?
...
Рейтинг: 0 / 0
07.05.2012, 15:54:25
    #37785296
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoft, оно экранируется и оборачивается в кавычки
...
Рейтинг: 0 / 0
07.05.2012, 16:04:20
    #37785304
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Няша рррmiksoft, оно экранируется и оборачивается в кавычкиАга, один-единственный входной параметр из показанных пары десятков.
...
Рейтинг: 0 / 0
07.05.2012, 16:07:37
    #37785305
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?
...
Рейтинг: 0 / 0
07.05.2012, 16:13:36
    #37785309
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Няша рррmiksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?А про будет/не будет - ничего в исходном посте не написано. Область применения этого кода вообще не определена.
Да, собственно, и существование людей, способных засунуть данные из HTTP-запроса напрямую в SQL-запрос, оспаривать вряд ли возможно. Иначе откуда такое обилие SQL-инъекций на сайтах по всему интернету.
...
Рейтинг: 0 / 0
07.05.2012, 16:15:08
    #37785312
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
И, кстати, в приведенном коде напрочь отсутствует какая-либо обработка ошибок.
...
Рейтинг: 0 / 0
07.05.2012, 16:15:45
    #37785313
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Няша рррmiksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?
Некоторые дебилы их ещё методом POST передают/получают. Отладчик (встроенный или фидлер) рулит!.
...
Рейтинг: 0 / 0
07.05.2012, 16:17:12
    #37785315
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoftНяша рррmiksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?А про будет/не будет - ничего в исходном посте не написано. Область применения этого кода вообще не определена.
Да, собственно, и существование людей, способных засунуть данные из HTTP-запроса напрямую в SQL-запрос, оспаривать вряд ли возможно. Иначе откуда такое обилие SQL-инъекций на сайтах по всему интернету.

Это все рассуждения на тему. Необоснованная критика засчитана.
...
Рейтинг: 0 / 0
07.05.2012, 16:18:16
    #37785317
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
ShSergeНяша рррmiksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?
Некоторые дебилы их ещё методом POST передают/получают. Отладчик (встроенный или фидлер) рулит!.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    private function _prepare(&$data) {
        foreach ($data as &$v) {
            if (is_null($v)) {
                $v = 'NULL';
            }
            else if (is_bool($v)) {
                $v = $v ? 'TRUE' : 'FALSE';
            }
            else if (is_string($v)) {
                $v = $this->quote($v);
            }
        }
    }
    
    public function insert($table, $data) {
        $this->_prepare($data);
        $query = "INSERT INTO {$this->prefix}$table";
        $query .= ' (' . implode(', ', array_keys($data)) . ')';
        $query .= ' VALUES (' . implode(', ', array_values($data)) . ');';
        $this->query($query);
        return $this->insertId();
    }
...
Рейтинг: 0 / 0
07.05.2012, 16:20:48
    #37785320
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Няша рррmiksoftпропущено...
А про будет/не будет - ничего в исходном посте не написано. Область применения этого кода вообще не определена.
Да, собственно, и существование людей, способных засунуть данные из HTTP-запроса напрямую в SQL-запрос, оспаривать вряд ли возможно. Иначе откуда такое обилие SQL-инъекций на сайтах по всему интернету.

Это все рассуждения на тему. Необоснованная критика засчитана.Нет, это не просто рассуждения. Я, увы, слишком часто вижу топики новичков, конкатенирующих в SQL-запрос все, что попало.
Вы уверены, что ваш код никогда к такому новичку не попадет?
...
Рейтинг: 0 / 0
07.05.2012, 16:24:35
    #37785325
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoftК чему все это?Повторяю свой вопрос.
Зачем этот код, кроме как для экономии нескольких букв при вызове стандартных функций?
Проверки входных данных почти нет, обработки ошибок нет, логирования (или еще какой помощи для отладки) нет.
...
Рейтинг: 0 / 0
07.05.2012, 16:27:38
    #37785326
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoft, есть try catch'ем отлавливаются
...
Рейтинг: 0 / 0
07.05.2012, 16:28:30
    #37785329
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    public function query($query) {
        ++$this->counter;
        $this->executionTime = -microtime(1);
        $result = mysql_query($query, $this->_connection);
        $this->executionTime += microtime(1);
        $this->totalExecutionTime += $this->executionTime;
        $this->numRows = null;
        $this->affectedRows = mysql_affected_rows($this->_connection);
        
        if (is_bool($result)) {
            if (!$result) {
                throw new Exception('SQL Error Code: ' . mysql_errno($this->_connection) . ' - ' . mysql_error($this->_connection) . ". Query: $query");
            }
        }
        else {
            // $this->numRows = mysql_num_rows($result);
            $this->numRows = $this->affectedRows;   
            return $result;
        }       
    }
...
Рейтинг: 0 / 0
07.05.2012, 16:29:20
    #37785330
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Няша рррtryВ представленном коде не вижу такого.
Да и не всегда ошибки являются исключениями.
...
Рейтинг: 0 / 0
07.05.2012, 16:43:09
    #37785340
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
Няша ррр
Код: php
1.
$this->_connection

Кстати, а вы, случаем, не mysqli изобретаете?
...
Рейтинг: 0 / 0
07.05.2012, 16:51:36
    #37785344
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoftНяша ррр
Код: php
1.
$this->_connection

Кстати, а вы, случаем, не mysqli изобретаете?

о нем всем прекрасно известно, можно еще вспомнить PDO и прочее, да для них всех пишут обертки. Лучше бы подсказали что придумать для встроенных функций и констант SQL. Поясняю:

Код: php
1.
$db->insert('users', array('id' => null, 'name' => 'tester', 'pass' => 'qwerty', 'reg_dateime' => 'DATETIME'));



Сгенерирует такую SQL-строку и отправит на сервер:

Код: sql
1.
INSERT INTO t_users (id, name, pass, reg_dateime) VALUES (NULL, 'tester', 'qwerty', 'DATETIME');
...
Рейтинг: 0 / 0
07.05.2012, 16:53:13
    #37785346
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoft, приходит в голову тока проверять на instance of обертку в виде класса сделать
...
Рейтинг: 0 / 0
07.05.2012, 16:56:08
    #37785349
?????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
авторЛучше бы подсказали что придумать для встроенных функций и констант SQL
какой смысл придумывать то, что и так неплохо реализовано средствами самого SQL?!
...
Рейтинг: 0 / 0
07.05.2012, 16:58:32
    #37785352
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
?????авторЛучше бы подсказали что придумать для встроенных функций и констант SQL
какой смысл придумывать то, что и так неплохо реализовано средствами самого SQL?!

Не в тему.
...
Рейтинг: 0 / 0
07.05.2012, 17:07:02
    #37785356
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте кот(оберька для MySQL)!
miksoft...Зачем этот код, кроме как для экономии нескольких букв...
Как раз букв будет существенно больше. А толку, насколько я понимаю, никакого. А всё из-за того, что топикстартер так и не ответил зачем это ему нужно.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте кот(оберька для MySQL)! / 25 сообщений из 133, страница 1 из 6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]