powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте кот(оберька для MySQL)!
25 сообщений из 133, страница 1 из 6
Покритикуйте кот(оберька для MySQL)!
    #37785279
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Покритикуйте кот(оберька для MySQL)!
    #37785282
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Покритикуйте кот(оберька для MySQL)!
    #37785286
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К чему все это?
Хоть бы мало-мальское экранирование/проверки сделали. Иначе при любых отклонениях во входных данных - либо ошибка синтаксиса, либо SQL-инъекция, либо непредсказуемое поведение.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785288
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, $this->quote($text)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785290
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Покритикуйте кот(оберька для MySQL)!
    #37785293
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoft, $this->quote($text)И что?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785296
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, оно экранируется и оборачивается в кавычки
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785304
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoft, оно экранируется и оборачивается в кавычкиАга, один-единственный входной параметр из показанных пары десятков.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785305
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785309
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?А про будет/не будет - ничего в исходном посте не написано. Область применения этого кода вообще не определена.
Да, собственно, и существование людей, способных засунуть данные из HTTP-запроса напрямую в SQL-запрос, оспаривать вряд ли возможно. Иначе откуда такое обилие SQL-инъекций на сайтах по всему интернету.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785312
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, кстати, в приведенном коде напрочь отсутствует какая-либо обработка ошибок.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785313
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?
Некоторые дебилы их ещё методом POST передают/получают. Отладчик (встроенный или фидлер) рулит!.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785315
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНяша рррmiksoft, типа $table и прочие? Какой дебил их будет из адресной строки получать?А про будет/не будет - ничего в исходном посте не написано. Область применения этого кода вообще не определена.
Да, собственно, и существование людей, способных засунуть данные из HTTP-запроса напрямую в SQL-запрос, оспаривать вряд ли возможно. Иначе откуда такое обилие SQL-инъекций на сайтах по всему интернету.

Это все рассуждения на тему. Необоснованная критика засчитана.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785317
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Покритикуйте кот(оберька для MySQL)!
    #37785320
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoftпропущено...
А про будет/не будет - ничего в исходном посте не написано. Область применения этого кода вообще не определена.
Да, собственно, и существование людей, способных засунуть данные из HTTP-запроса напрямую в SQL-запрос, оспаривать вряд ли возможно. Иначе откуда такое обилие SQL-инъекций на сайтах по всему интернету.

Это все рассуждения на тему. Необоснованная критика засчитана.Нет, это не просто рассуждения. Я, увы, слишком часто вижу топики новичков, конкатенирующих в SQL-запрос все, что попало.
Вы уверены, что ваш код никогда к такому новичку не попадет?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785325
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftК чему все это?Повторяю свой вопрос.
Зачем этот код, кроме как для экономии нескольких букв при вызове стандартных функций?
Проверки входных данных почти нет, обработки ошибок нет, логирования (или еще какой помощи для отладки) нет.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785326
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, есть try catch'ем отлавливаются
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785329
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Покритикуйте кот(оберька для MySQL)!
    #37785330
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррtryВ представленном коде не вижу такого.
Да и не всегда ошибки являются исключениями.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785340
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррр
Код: php
1.
$this->_connection

Кстати, а вы, случаем, не mysqli изобретаете?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785344
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Покритикуйте кот(оберька для MySQL)!
    #37785346
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, приходит в голову тока проверять на instance of обертку в виде класса сделать
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785349
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЛучше бы подсказали что придумать для встроенных функций и констант SQL
какой смысл придумывать то, что и так неплохо реализовано средствами самого SQL?!
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785352
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????авторЛучше бы подсказали что придумать для встроенных функций и констант SQL
какой смысл придумывать то, что и так неплохо реализовано средствами самого SQL?!

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


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