powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте кот(оберька для MySQL)!
133 сообщений из 133, показаны все 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
Покритикуйте кот(оберька для MySQL)!
    #37785363
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА всё из-за того, что топикстартер так и не ответил зачем это ему нужно.
+100500! гыгы ?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785369
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSergemiksoft...Зачем этот код, кроме как для экономии нескольких букв...
Как раз букв будет существенно больше. А толку, насколько я понимаю, никакого. А всё из-за того, что топикстартер так и не ответил зачем это ему нужно.

Код: php
1.
2.
3.
4.
5.
6.
7.
$id = $db->insert('users', array('id' => null, 'name' => 'tester', 'pass' => 'qwerty'));

// VS

$sql = "INSERT INTO $prefix$table (id, name, values) VALUES(NULL, '" . mysql_real_escape_string($name) . '", '" . mysql_real_escape_string($pass) . '");";
mysql_query($query);
$id = mysql_insert_id();



В случае с UPDATE ещё удобнее
Код: php
1.
2.
3.
$user = $db->find('users', 1);
$user['pass'] = 'test';
$db->update('users', $user);
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785372
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????, мимо тащем-то
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785374
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*$db->update('users', $user, 1);
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785385
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррВ случае с UPDATE ещё удобнее
Код: php
1.
2.
3.
$user = $db->find('users', 1);
$user['pass'] = 'test';
$db->update('users', $user);

Тут очень много "если".
А что, если поле, по которому нужно найти записи не `id` ?
А что, если вернется несколько записей?
А что, если не вернется ни одной записи?
А что, если в таблице users вообще нет поля id?

А если начать оборачивать ваш код проверками, то в итоге все еще не ясно, какой код короче окажется.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785394
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
try {
    $db = new MySQL($db_host, $db_user, $db_pass, $db_name, $db_prefix);
    $db->setCharset('utf8');
    // $db->query(), $db->find(), $db->insert(), $db->update(), $db->delete(), ...
}
catch (Exception $e) {
    echo($e->getMessage()); // Ошибки подключения, синтаксиса запроса и пр.
}
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785397
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, хотя может кому-нить и удобно писать везде mysql_query() || die(mysql_error())
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785401
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoft,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
try {
    $db = new MySQL($db_host, $db_user, $db_pass, $db_name, $db_prefix);
    $db->setCharset('utf8');
    // $db->query(), $db->find(), $db->insert(), $db->update(), $db->delete(), ...
}
catch (Exception $e) {
    echo($e->getMessage()); // Ошибки подключения, синтаксиса запроса и пр.
}

"$db->query(), $db->find(), $db->insert(), $db->update(), $db->delete()" - это, как я понимаю, предполагаются вызовы этих функций? Ну и как узнавать, в какой из них произошло исключение?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785403
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoft, хотя может кому-нить и удобно писать везде mysql_query() || die(mysql_error())Новичкам явно удобнее. Им дай бог хэлп по стандартным функциям освоить. А тут еще какую-то дополнительную обертку надо изучать, в которой грабли те же, но лучше замаскированы.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785404
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНяша рррmiksoft, хотя может кому-нить и удобно писать везде mysql_query() || die(mysql_error())Новичкам явно удобнее. Им дай бог хэлп по стандартным функциям освоить. А тут еще какую-то дополнительную обертку надо изучать, в которой грабли те же, но лучше замаскированы.

Мне дела нет до новичков особого, debug_backtrace можно вызвать и указать, хотя если намеренно ошибки не отлавливать то сам PHP укажет место
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785405
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. не ошибки, а исключения
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785406
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррМне дела нет до новичков особогоНу вот, опять приходим к тому, что цели и задачи этого кода не определены.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785425
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$db->insert('users', array('id' => null, 'name' => 'tester', 'pass' => 'qwerty', 'reg_dateime' => $db->unescape('DATETIME'))); // INSERT INTO t_users (id, name, pass, reg_dateime) VALUES (NULL, 'tester', 'qwerty', DATETIME);

    public function unescape($string) {
        return new SQLExpression($string);
    }

class SQLExpression {
    private $_value;
    
    public function __construct($value) {
        $this->_value = $value;
    }
    
    public function __toString() {
        return $this->_value;
    }
}
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785436
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так:

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



Строки пускай по-умолчанию эскейпется. Лан мне все равно никто ничем не помог.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785470
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррЛан мне все равно никто ничем не помог.А при имеющихся столь скудных вводных, ничего, кроме общего теоретизирования, и не ждите.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785485
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррНе в тему.
Все что не совпадает с мнением - все не в тему у вас.
Нахуана тогда тема создана?

Ценность поделки = 0. Это и без темы понятно.
Вы делаете ровно то, что необходимо ВАМ в данном конкретном случае.
Что другие могут на это ответить?

Ну и как бы вы просили покритиковать. А на критику рты затыкаете.
И чо писать тогда тут? Хвалить нечего. Собственно и критиковать тоже. Писанина да и всё.

Как только возникнет необходимость написать более-менее сложный запрос, вся эта писанина окажется в корзине.
Вот и вся критика.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785487
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЛан мне все равно никто ничем не помог.
А это возможно теоритически?
А с учетом, что еще требуется доказать вам же, что это помощь для вас?

Лесом с такими приколами
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785493
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: Я такие вещи писал наверное раза 3, когда практиковался в написании несложных узкоспециализированных админок с полного нуля. Если б у меня возникла мысля вывалить подобные набивки руки и опыта на всеобщее оборзение - я б наверное выкинул модем и временно повесился до полного возвращения адекватности в мозг... =)))
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785498
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьху, забыл спросить:

авторПокритикуйте кот(оберька...

это на каком диалекте?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785508
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Edd.DragonТьху, забыл спросить:

авторПокритикуйте кот(оберька...

это на каком диалекте?

Писал покажи, я не уверен что ты что-то лучше написал.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785519
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррПисал покажи, я не уверен что ты что-то лучше написал.

1. Говорю: "Никогда бы в голову не пришла мысль это выкладывать". В ответ слышу: "Так выложи!". Мой логический аппарат протестует...

2. Я сказал ровно то, что сказал. А у тебя сразу мысль (о чем я даже и не заикался, ибо мне это побоку) - сравнить, и доказать, что твое не хуже. Ну... Ты ради этого писал и выложил, что ли?

В общем, я к тому, что задумайся над своей мотивацией и самооценкой. И не торопись кричать "похвалите!". Ты даже еще не дошел до джоинов, нормальной обработки диапазонов в условиях, хевенов и т.д.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785523
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Edd.DragonНяша рррПисал покажи, я не уверен что ты что-то лучше написал.

1. Говорю: "Никогда бы в голову не пришла мысль это выкладывать". В ответ слышу: "Так выложи!". Мой логический аппарат протестует...

2. Я сказал ровно то, что сказал. А у тебя сразу мысль (о чем я даже и не заикался, ибо мне это побоку) - сравнить, и доказать, что твое не хуже. Ну... Ты ради этого писал и выложил, что ли?

В общем, я к тому, что задумайся над своей мотивацией и самооценкой. И не торопись кричать "похвалите!". Ты даже еще не дошел до джоинов, нормальной обработки диапазонов в условиях, хевенов и т.д.

тото сложно сообразить как джоины сделать

$db->select('table1 as t1 LEFT JOIN table2 as t2 ON t1.id = t2.pid', $cols, $where);
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785526
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррртото сложно сообразить как джоины сделать

$db->select('table1 as t1 LEFT JOIN table2 as t2 ON t1.id = t2.pid', $cols, $where);А в серьезных запросах ( с подзапросами и т.д.) туда просто большая часть запроса уедет. И обертка превратится в тыкву фантик.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785530
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНяша ррртото сложно сообразить как джоины сделать

$db->select('table1 as t1 LEFT JOIN table2 as t2 ON t1.id = t2.pid', $cols, $where);А в серьезных запросах ( с подзапросами и т.д.) туда просто большая часть запроса уедет. И обертка превратится в тыкву фантик.

Прошу назвать хотя бы один фреймворк, класс где таково не произойдёт.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785540
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррртото сложно сообразить как джоины сделать
$db->select('table1 as t1 LEFT JOIN table2 as t2 ON t1.id = t2.pid', $cols, $where);

Ну и смысл? Пол запроса пришем вручную (еще и в кавычки забыли облачить имена таблиц), а половину автоматизируем.

Что мешало написать пару функций для обработки потенциально опасных параметров, а дальше юзать стандартные средства? Но хочется ж и самому пописать, чтобы понять, почему стандартные средства гибки ровно на столько, а не больше, и какие проблемы поджидают в попытках добиться бОльшей гибкости. Это нормальное желание. С этим я даже спорить не буду. Но вы лучше устремите свои усилия в сторону создания практических задач для использования своего кода. Вот тогда и станет видно, что вот до такого момента все хорошо. Дальше уже выгоды - ноль. А для такой системы было бы лучше совсем иначе поступить. А вот теперь я уже достаточно наигрался, насмаковался и уже вижу где месил воду в ступе ради практики, а что из кода действительно полезно.

Более эффективным способом набрать опыта и профессионализма, безусловно, является работа в команде и с уже проверенным боем кодом. Тогда не придется тратить время на повторение уже многократно пройденного другими пути, а можно будет подумать, что в имеющемся коде можно улучшить (по вашему мнению и применительно к конкретным задачам) и обсудить , а так ли оно на самом деле, как вам показалось.

Без конкретных систем, обсуждать такие модули применительно к вакууму - бесполезно. Ибо очевидно, что они не являются уневерсальными конструкторами любых запросов на все случаи жизни, а "автоматизируют" лишь элементарные вещи элементарными способами, что в общем-то не интересно для обсуждения.

Как говорится, изюму нету (с)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785541
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррПрошу назвать хотя бы один фреймворк, класс где таково не произойдёт.
Об том и речь.

Так на кой вы пишите очередную несерьезность, а не пользуетесь уже готовыми и проверенными?
Очень нравится, когда на очередном велосипедике слетает цепь и ты на обочине по локоть в смазке?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785544
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Edd.DragonНяша ррртото сложно сообразить как джоины сделать
$db->select('table1 as t1 LEFT JOIN table2 as t2 ON t1.id = t2.pid', $cols, $where);

Ну и смысл? Пол запроса пришем вручную (еще и в кавычки забыли облачить имена таблиц), а половину автоматизируем.

Что мешало написать пару функций для обработки потенциально опасных параметров, а дальше юзать стандартные средства? Но хочется ж и самому пописать, чтобы понять, почему стандартные средства гибки ровно на столько, а не больше, и какие проблемы поджидают в попытках добиться бОльшей гибкости. Это нормальное желание. С этим я даже спорить не буду. Но вы лучше устремите свои усилия в сторону создания практических задач для использования своего кода. Вот тогда и станет видно, что вот до такого момента все хорошо. Дальше уже выгоды - ноль. А для такой системы было бы лучше совсем иначе поступить. А вот теперь я уже достаточно наигрался, насмаковался и уже вижу где месил воду в ступе ради практики, а что из кода действительно полезно.

Более эффективным способом набрать опыта и профессионализма, безусловно, является работа в команде и с уже проверенным боем кодом. Тогда не придется тратить время на повторение уже многократно пройденного другими пути, а можно будет подумать, что в имеющемся коде можно улучшить (по вашему мнению и применительно к конкретным задачам) и обсудить , а так ли оно на самом деле, как вам показалось.

Без конкретных систем, обсуждать такие модули применительно к вакууму - бесполезно. Ибо очевидно, что они не являются уневерсальными конструкторами любых запросов на все случаи жизни, а "автоматизируют" лишь элементарные вещи элементарными способами, что в общем-то не интересно для обсуждения.

Как говорится, изюму нету (с)

Ничего универсального нет.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785551
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррНичего универсального нет.
Очевидно.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785556
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может на github эти три класса выложить?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785560
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АД
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785561
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett, ИЗРАИЛЬ
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785568
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всю тему не читал, только 1 страницу осилил и то мельком.
Мне бы было не очень удобно использовать эту штуку, т.к. она кроме неудобства ничего не дает.
Поглядите, например, реализацию ORM в Yii (не путать с конструктором запросов, хотя и его можно тоже посмотреть)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785795
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я всегда говорю, напишите хелловорлд. В контексте баз данных, хелловорлд - это телефонный справочник. Три-четыре таблицы в БД понадобятся, если не наворачивать. Возможно, понадобятся х-ые процедуры, функции и триггеры.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785823
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSerge... напишите хелловорлд ... хелловорлд - это телефонный справочник ... понадобятся х-ые процедуры, функции и триггеры.

Не понадобятся, уже написал, все работает как часы.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785845
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррShSerge... напишите хелловорлд ... хелловорлд - это телефонный справочник ... понадобятся х-ые процедуры, функции и триггеры.

Не понадобятся, уже написал, все работает как часы.
Отлично. Теперь остаётся только сравнить где больше буков, то есть, при использовании Вашего фреймворка, или при использовании стандартного подхода. Если в первом случае меньше и написать проще, то имеет право на жизнь. А если нет - то уж пардон. Я ничего же не говорю. Просто тест такой.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785869
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSerge,

три строчки экономия на каждом запросе
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785873
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а джоинов нет
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785880
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНе понадобятся, уже написал, все работает как часы.
Код: php
1.
2.
3.
$user = $db->find('users', 1);
$user['pass'] = 'test';
$db->update('users', $user);



Код: php
1.
2.
3.
$user = $db->find('users', 1);
$user['roles'] = array('admin', 'poweruser', 'simpleuser');
$db->update('users', $user); //---------?!-------------
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785907
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonНяша рррПрошу назвать хотя бы один фреймворк, класс где таково не произойдёт.
Об том и речь.

Так на кой вы пишите очередную несерьезность, а не пользуетесь уже готовыми и проверенными?
Очень нравится, когда на очередном велосипедике слетает цепь и ты на обочине по локоть в смазке?

Ээ, ну опять же в том же ORM Yii все джоины и много чего еще прекрасно инкапсулируется в OOP код. Но тут немножко другая песня. В построителе запросов CI есть методы join:

Код: php
1.
2.
3.
4.
5.
$this->db->select('*');
 $this->db->from('blogs');
 $this->db->join('comments', 'comments.id = blogs.id');

 $query = $this->db->get();



Если не сталкивались, обязательно посмотрите
http://codeigniter.com/user_guide/database/active_record.html
В Yii похоже http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder
Yii active record http://www.yiiframework.com/doc/guide/1.1/en/database.ar
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785918
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[offtop]
После раскуривания SQLAlchemy все остальные ОРМы смотрятся как ...
[/offtop]
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785925
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
5.
6.
$user = $db->find('users', $_GET['id']);
if ($user) {
$user['pass'] = 'qwerty';
$db->update('users', $user, $_GET['id']); 
}
else { /* Пользователь не найден */ }



JOIN можно реализовать так попробовать, но мне он не особо нужен как и конструктор запросов
Код: php
1.
$db->selectAll($db->join($table1, $table2, $on), $cols, $where, $limit);
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785932
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор$db->selectAll($db->join($table1, $table2, $on), $cols, $where, $limit);
Вот это уже может моск сломать.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785937
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
5.
6.
$user = $db->find('users', $_GET['id']); //страница может не прислать $_GET['id']!!!
if ($user) {
$user['pass'] = 'qwerty';
$db->update('users', $user, $_GET['id']); //жесть! если мы получили пользователя, то и ИД его нам уже известен!
}
else { /* Пользователь не найден */ }


спрошу ещё раз
Код: php
1.
2.
3.
$user = $db->find('users', 1);
$user['roles'] = array('admin', 'poweruser', 'simpleuser');
$db->update('users', $user); //---------?!-------------
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37785949
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????, трудный штоле?


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    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);
            }
        }
        return $data;
    }



Переписываем

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    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_array($v)) {
                $v = $this->quote(implode($v));
            }
            else if (is_string($v)) {
                $v = $this->quote($v);
            }
        }
        return $data;
    }



Хотя мне непонятно зачем массив, когда чтобы набрать строку нужно меньше символов, поэтому мне такой функциАНАЛ не нужен
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786002
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettа джоинов нет
За последних пять лет, если не больше, не написал ни одного запроса без соединений таблиц (джойнов). :)
Даже хелловорлд (телефонный справочник) предполагает соединение минимум двух таблиц: справочник мемберов и справочник телефонных номеров (у каждого мембера их может быть несколько).
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786042
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторХотя мне непонятно зачем массив, когда чтобы набрать строку нужно меньше символов, поэтому мне такой функциАНАЛ не нужен
ну непонятно и ладно...! потом разберёшься ;)

Успехов!!!

гыгы: набрать строку (C)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786043
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррмне такой функциАНАЛ не нужен
А где посмотреть ТЗ на функционал, который тебе нужен?
Интересный диалог получается.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786293
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeHettа джоинов нет
За последних пять лет, если не больше, не написал ни одного запроса без соединений таблиц (джойнов). :)
Даже хелловорлд (телефонный справочник) предполагает соединение минимум двух таблиц: справочник мемберов и справочник телефонных номеров (у каждого мембера их может быть несколько).
Что вреш уж)
ВОзмем к примеру какой нить кроновский скрипт - что от него требуеться? Чтобы он что нить сделал но при этом не грузил больно сильно базу, так как паралельно сайт работает. Ну к примеру надо по списку транзакций обновить баланс пользователей.
Ну и если ты допустим сделаешь какой нить мошнецкий запрос выборки всех юзеров джойн транзакции (юзеров 1000,000, и у кажого по 100 трназакций) получим зависание сайта минимум на пару минут.

Если же вначале всех юзеров вытащить,и для каждой таскать отдельными запросами транзакции, получим скрипт хоть и будет выполняться в два раза дольше, база будет доступна для сайта нормально.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786296
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррmiksoftпропущено...
А в серьезных запросах ( с подзапросами и т.д.) туда просто большая часть запроса уедет. И обертка превратится в тыкву фантик.

Прошу назвать хотя бы один фреймворк, класс где таково не произойдёт.
Поглядите как вам уже товаришь Hett минимум 3 раза написал как все реализовано в Yii. В их реализации паттерна ActiveRecord как обертки над базой все джойны или дозагрузки данных (lazy load) происходят автоматом, вам останеться только настроить модели и о SQL можно правтикечки забыть
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786297
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не исключает джоинов
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786302
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РенатВ их реализации паттерна ActiveRecord как обертки над базой все джойны или дозагрузки данных (lazy load) происходят автоматом
Ну это от пожеланий программиста зависит, with и together никто не отменял. При этом конечный результат останется одинаковым, разве что будет выполнено разное количество запросов.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786324
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а не к ночи помянутая доктрина умеет даже больше.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786381
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
$select = $db->getSelect($table, $cols); // return new DBSelect($this, $table, $cols);
$select->join($table1, $on_condition)->where($where_condition);
var_dump($db->rows($select));
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786401
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще немножко и что-то уже более внятное получится
Код: php
1.
2.
3.
4.
5.
$select->select('бла бла бла')
          ->from('bla bla')
          ->inner_join($table1, $on_condition)
          ->where($where_condition)
          ->fetchAll($fetch_type);
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786402
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowа не к ночи помянутая доктрина умеет даже больше.
тормозная, говорят. (
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786407
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот задача, интересно, справится ли доктрина?

Код: plaintext
1.
Есть таблица "Пользователи", и есть таблица "Вещи". Между ними связь многие-ко-многим. 
Нужно выбрать пользователей имеющих определенные вещи одновременно. 
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786419
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

Да брось ты этой фигнёй заниматься.
Если и справится, то хреново.
Вспоминается немного давнишний фреймворк на делфях. Типа, если таблица, то селект-звёздочка (по имени таблицы), а там в нескольких модулях(!) уже делфи с массивами когда разберётся, чего-то посчитает, тогда выводится какой-то результат. Короче, кошмар. Мне пришлось несколько изменять алгоритм. Пару дней сидел чесал репу и думал. Потом надоело, написал программу с правильным запросом без всей этой фигни за полчаса. А потом вообщё всё приложение нафиг переписал.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786420
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, если работа с базой - только стандартным образом SQL. Хоть ты тресни! Всё остальное ламерами и для ламеров придумано.
ПС. Это касается только работы с БД. Так что не подумайте чего.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786421
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSerge, попахивает индусиазмом
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786423
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррShSerge, попахивает индусиазмом
Дык, токо пиво сегодня пил. :)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786467
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хз как этими конченными гуглокодами пользоваца
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786470
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотел на это гавно залить а на гиты и прочая дрочь никада не пользовался

Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
<?php

class DBSelect {
    private $_db,
            $_table,
            $_columns,
            $_joins = array(),
            $_order,
            $_group,
            $_where,
            $_limit;
    
    public function __construct($db, $table, $columns) {
        $this->_db = $db;
        $this->_table = $table;
        $this->_columns = $columns;
    }
    
    public function join($table, $on_condition, $type = 'INNER') {
        $this->_joins[] = $type . ' JOIN ' . $this->_db->getTablename($table) . ' ON ' . $on_condition;
        return $this;
    }
    
    public function order($order) {
        $this->_order = $order;
        return $this;
    }
    
    public function group($group) {
        $this->_group = $group;
        return $this;
    }
    
    public function where($where) {
        $this->_where = $where;
        return $this;
    }
    
    public function limit($x = null, $y = null) {
        $x = (int) $x;
        $y = (int) $y;
        $this->_limit = $y > 0 ? "$x, $y" : ($x > 0 ? $x : null);
        return $this;
    }
    
    public function __toString() {
        $select = 'SELECT ' . $this->_columns . ' FROM ' . $this->_db->getTablename($this->_table);
        if (count($this->_joins)) {
            $select .= ' ' . implode(' ', $this->_joins);
        }
        if ($this->_where) {
            $select .= " WHERE {$this->_where}";
        }
        if ($this->_group) {
            $select .= " GROUP BY {$this->_group}";
        }
        if ($this->_order) {
            $select .= " ORDER BY {$this->_order}";
        }
        if ($this->_limit) {
            $select .= " LIMIT {$this->_limit}";
        }
        return $select;
    }
}

?>
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786520
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DBSelect.php

Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
<?php

class DBSelect {
    private $_db,
            $_table,
            $_columns,
            $_joins = '',
            $_order,
            $_group,
            $_where,
            $_limit;
    
    public function __construct($db, $table, $columns) {
        $this->_db = $db;
        $this->_table = $table;
        $this->_columns = $columns;
    }
    
    public function join($table, $condition, $type = 'INNER') {
        $this->_joins .= ' ' . $type . ' JOIN ' . $this->_db->getTablename($table) . ' ON ' . $condition;
        return $this;
    }
    
    public function order($order) {
        $this->_order = $order;
        return $this;
    }
    
    public function group($group) {
        $this->_group = $group;
        return $this;
    }
    
    public function where($where) {
        $this->_where = $where;
        return $this;
    }
    
    public function limit($offset = null, $limit = null) {
        $offset = (int) $offset;
        $limit = (int) $limit;
        $this->_limit = $limit > 0 ? "$offset, $limit" : ($offset > 0 ? $offset : null);
        return $this;
    }
    
    public function __toString() {
        $select = 'SELECT ' . $this->_columns . ' FROM ' . $this->_db->getTablename($this->_table);
        if (count($this->_joins)) {
            $select .= $this->_joins;
        }
        if ($this->_where) {
            $select .= " WHERE {$this->_where}";
        }
        if ($this->_group) {
            $select .= " GROUP BY {$this->_group}";
        }
        if ($this->_order) {
            $select .= " ORDER BY {$this->_order}";
        }
        if ($this->_limit) {
            $select .= " LIMIT {$this->_limit}";
        }
        return $select;
    }
}

?>



DB.php
Код: 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.
    public function getSelect($table, $columns) {
        return new DBSelect($this, $table, $columns);
    }
    
    private function _buildSelect($table, $columns, $where, $offset = null, $limit = null, $order = null, $group = null) {      
        return $this->getSelect($table, $columns)
               ->where($where)
               ->limit($offset, $limit)
               ->order($order)
               ->group($group);
    }

    public function select($table, $columns = '*', $where = null) {
        $query = $this->_buildSelect($table, $columns, $where);
        $result = $this->query($query);
        return $this->fetch($result);
    }
    
    public function find($table, $id, $columns = '*') {
        return $this->select($table, $columns, 'id = ' . intval($id));
    }
    
    public function selectAll($table, $columns = '*', $where = null, $offset = null, $limit = null, $order = null, $group = null) {
        $query = $this->_buildSelect($table, $columns, $where, $offset, $limit, $order, $group);
        $result = $this->query($query);
        return $this->fetchAll($result);
    }
    
    public function search($table, $columns, $key_column, $text, $offset = null, $limit = null, $order = null) {
        return $this->selectAll($table, $columns, "$key_column LIKE '%" . $this->escapeLike($text) . "%'", $offset, $limit, $order);
    }
    
    public function fullTextSearch($table, $columns, $match_columns, $text, $offset = null, $limit = null, $order = null) {
        return $this->selectAll($table, $columns, "MATCH ($match_columns) AGAINST (" . $this->quote($text) . ')', $offset, $limit, $order);
    }



DBExpression.php
MySQL.php
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786523
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКороче, если работа с базой - только стандартным образом SQL. Хоть ты тресни!
гыгы:
http://www.mongodb.org/display/DOCS/Home
http://php.net/manual/en/book.mongo.php

ПыПыСы Оооо!!! понеслись простыни!!!
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786534
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????авторКороче, если работа с базой - только стандартным образом SQL. Хоть ты тресни!
гыгы:
http://www.mongodb.org/display/DOCS/Home
http://php.net/manual/en/book.mongo.php

ПыПыСы Оооо!!! понеслись простыни!!!

Херня, ты просто дуРАЧЁК, твои замечания такие же глупые как и ты.

Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
<?php

class DBSelect {
    private $_db,
            $_table,
            $_columns,
            $_joins = '',
            $_order,
            $_group,
            $_where,
            $_limit;
    
    public function __construct($db, $table, $columns = '*') {
        $this->_db = $db;
        $this->_table = $table;
        $this->_columns = $columns;
    }
    
    public function join($table, $condition, $type = 'INNER') {
        $this->_joins .= ' ' . $type . ' JOIN ' . $this->_db->getTablename($table) . ' ON ' . $condition;
        return $this;
    }
    
    public function order($order) {
        $this->_order = $order;
        return $this;
    }
    
    public function group($group) {
        $this->_group = $group;
        return $this;
    }
    
    public function where($where) {
        $this->_where = $where;
        return $this;
    }
    
    public function limit($offset = null, $limit = null) {
        $offset = (int) $offset;
        $limit = (int) $limit;
        $this->_limit = $limit > 0 ? "$offset, $limit" : ($offset > 0 ? $offset : null);
        return $this;
    }
    
    public function __toString() {
        $select = 'SELECT ' . $this->_columns . ' FROM ' . $this->_db->getTablename($this->_table);
        if (count($this->_joins)) {
            $select .= $this->_joins;
        }
        if ($this->_where) {
            $select .= " WHERE {$this->_where}";
        }
        if ($this->_group) {
            $select .= " GROUP BY {$this->_group}";
        }
        if ($this->_order) {
            $select .= " ORDER BY {$this->_order}";
        }
        if ($this->_limit) {
            $select .= " LIMIT {$this->_limit}";
        }
        return $select . ';';
    }
    
    public function query() {
        return $this->_db->query($this);
    }
    
    public function fetch() {
        $result = $this->query();
        return $this->_db->fetch($result);
    }
    
    public function fetchAll() {
        $result = $this->query();
        return $this->_db->fetchAll($result);
    }
}

?>



Пример
Код: php
1.
2.
3.
4.
$select = new DBSelect($db, 'users AS u', 'u.name, u.realname, u.city, r.name AS role');
// $select = $db->createSelect('users AS u', 'u.name, u.realname, u.city, r.name AS role');
$select->join('roles AS r', 'u.role_id = r.id')->where('u.id = 123');
echo($select);



Код: sql
1.
SELECT u.name, u.realname, u.city, r.name AS role FROM t_users AS u INNER JOIN t_roles AS r ON u.role_id = r.id WHERE u.id = 123;
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786536
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автортолько стандартным образом SQL
http://couchdb.apache.org/
http://wiki.apache.org/couchdb/HTTP_Document_API
:)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786539
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторХерня, ты просто дуРАЧЁК, твои замечания такие же глупые как и ты.
Прости, но ты перестал мне быть интересен ещё на второй странице топа!
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786542
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????, ссылки не в тему

Код: php
1.
$user = $db->createSelect('users AS u', 'u.name, u.realname, u.city, r.name AS role')->join('roles AS r', 'u.role_id = r.id')->where('u.id = 123')->fetch();
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786547
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   private function _join($table, $condition, $type = 'INNER') {
        return ' ' . $type . ' JOIN ' . $this->_db->getTablename($table) . ' ON ' . $condition;
    }
    
    public function join($table, $condition, $type = null) {
        $this->_joins = $this->_join($table, $condition, $type);
        return $this;
    }
    
    public function addJoin($table, $condition, $type = null) {
        $this->_joins .= $this->_join($table, $condition, $type);
        return $this;
    }
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786550
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
    private function _join($table, $condition, $type = null) {
        $type = !$type ? 'INNER' : $type;
        return ' ' . $type . ' JOIN ' . $this->_db->getTablename($table) . ' ON ' . $condition;
    }
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786551
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На пидоне бы кот выглядел компактнее, плохо что нет однодолларовых хостингов с пидоном для экспериментов

Код: python
1.
user = db.createSelect('users AS u', 'u.name, u.realname, u.city, r.name AS role').join('roles AS r', 'u.role_id = r.id').where('u.id = 123').fetch();
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786597
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
magic_quotes_off.php

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
<?php

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    $clean = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    array_walk_recursive($clean, create_function('&$value', '$value = stripslashes($value);'));
}

?>



Отключаем на shared хостинге магические кавычки.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786639
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррНа пидоне бы кот выглядел компактнее, плохо что нет однодолларовых хостингов с пидоном для экспериментов

Код: python
1.
user = db.createSelect('users AS u', 'u.name, u.realname, u.city, r.name AS role').join('roles AS r', 'u.role_id = r.id').where('u.id = 123').fetch();


Нет Но красивее уж точно.

python
Код: sql
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
from sqlalchemy import create_engine
from sqlalchemy import ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship, backref, joinedload
engine = create_engine('sqlite:///:memory:', echo=True)

Base = declarative_base()

class User(Base):
    __tablename__ = 't_users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    realname = Column(String)
    city = Column(String)
    role_id = Column(Integer, ForeignKey('t_roles.id'))

    def __init__(self, name, realname, city):
        self.name, self.realname, self.city = name, realname, city

    def __repr__(self):
        return "<User('%s', '%s', '%s')>" % (self.name, self.realname, self.city)

class Role(Base):
    __tablename__ = 't_roles'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    users = relationship("User", order_by="User.id", backref="role")

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return "<Role('%s')>" % (self.name,)

Base.metadata.create_all(engine)


from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)

session = Session()

vasia = User('vasia', 'Вася Пупкин', 'ДС')
vasiasrole = Role('sysdba')
vasia.role = vasiasrole

session.add_all([vasia, vasiasrole])

print('Можно так')
print(session.query(User.name, User.realname, User.city, Role.name).\
filter(Role.id == User.role_id).filter(User.id == 1).one())

print('А можно вот так')

user = session.query(User).\
options(joinedload(User.role)).filter(User.id == 1).one()
print(user.name, user.realname, user.city, user.role.name)



лог
2012-05-09 11:06:45,273 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("t_roles")
2012-05-09 11:06:45,273 INFO sqlalchemy.engine.base.Engine ()
2012-05-09 11:06:45,273 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("t_users")
2012-05-09 11:06:45,273 INFO sqlalchemy.engine.base.Engine ()
2012-05-09 11:06:45,273 INFO sqlalchemy.engine.base.Engine
CREATE TABLE t_roles (
id INTEGER NOT NULL,
name VARCHAR,
PRIMARY KEY (id)
)


2012-05-09 11:06:45,275 INFO sqlalchemy.engine.base.Engine ()
2012-05-09 11:06:45,275 INFO sqlalchemy.engine.base.Engine COMMIT
2012-05-09 11:06:45,276 INFO sqlalchemy.engine.base.Engine
CREATE TABLE t_users (
id INTEGER NOT NULL,
name VARCHAR,
realname VARCHAR,
city VARCHAR,
role_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(role_id) REFERENCES t_roles (id)
)


2012-05-09 11:06:45,276 INFO sqlalchemy.engine.base.Engine ()
2012-05-09 11:06:45,278 INFO sqlalchemy.engine.base.Engine COMMIT
Можно так
2012-05-09 11:06:45,283 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2012-05-09 11:06:45,285 INFO sqlalchemy.engine.base.Engine INSERT INTO t_roles (name) VALUES (?)
2012-05-09 11:06:45,285 INFO sqlalchemy.engine.base.Engine ('sysdba',)
2012-05-09 11:06:45,286 INFO sqlalchemy.engine.base.Engine INSERT INTO t_users (name, realname, city, role_id) VALUES (?, ?, ?, ?)
2012-05-09 11:06:45,286 INFO sqlalchemy.engine.base.Engine ('vasia', 'Вася Пупкин', 'ДС', 1)
2012-05-09 11:06:45,288 INFO sqlalchemy.engine.base.Engine SELECT t_users.name AS t_users_name, t_users.realname AS t_users_realname, t_users.city AS t_users_city, t_roles.name AS t_roles_name
FROM t_users, t_roles
WHERE t_roles.id = t_users.role_id AND t_users.id = ?
2012-05-09 11:06:45,288 INFO sqlalchemy.engine.base.Engine (1,)
('vasia', 'Вася Пупкин', 'ДС', 'sysdba')
А можно вот так
2012-05-09 11:06:45,290 INFO sqlalchemy.engine.base.Engine SELECT t_users.id AS t_users_id, t_users.name AS t_users_name, t_users.realname AS t_users_realname, t_users.city AS t_users_city, t_users.role_id AS t_users_role_id, t_roles_1.id AS t_roles_1_id, t_roles_1.name AS t_roles_1_name
FROM t_users LEFT OUTER JOIN t_roles AS t_roles_1 ON t_roles_1.id = t_users.role_id
WHERE t_users.id = ?
2012-05-09 11:06:45,290 INFO sqlalchemy.engine.base.Engine (1,)
vasia Вася Пупкин ДС sysdba

Process finished with exit code 0
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786646
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррр,

Вообще, то что ты написал - полное гг, реализующее лишь конкатенацию строк с какой-то надуманной хренью. Написание запросов это не упрощает, скорее наоборот, делает более запутанным :) К тому же, о гибкости и расширяемости говорить не приходится.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786662
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?????автортолько стандартным образом SQL
http://couchdb.apache.org/
http://wiki.apache.org/couchdb/HTTP_Document_API
:)
Ну, это - совсем другое дело. Я экспериментировал с mongoDB. Сейчас же говорил именно про реляционные БД.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786667
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЯ экспериментировал с mongoDB.
couch тоже интересно - рекомендую поэкспериментировать ;)
авторСейчас же говорил именно про реляционные БД.
естественно!

<IMHO>
РБД === SQL!!! Для него, любая обёртка - седло на корове (да простит содружество ;)
есть желание что-то->find() - добро пожаловать в мир !РБД - бо для них - это родное!
</IMHO>
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786774
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????, студентота
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786806
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Коллеги, не пора ли закрывать тему? Обсуждение вроде исчерпало себя, плавно переходя в оффтопик.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786864
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кому на email скинуть может кто покопается че придумает/подскажет?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37786938
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
// SELECT u.name, r.name as role FROM t_users as u INNER JOIN t_roles as r ON u.role_id = r.id WHERE u.id = 123;
$user = $db->select('users as u', 'u.name, r.name as role')->join('roles as r', 'u.role_id = r.id')->where('u.id = 123')->fetch();



Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
<?php

class DBQuery {
    private $_query,
            $_db;
    
    public function __construct($db) {
        $this->_db = $db;
    }
    
    public function select($table, $columns = '*') {
        $this->_query = 'SELECT ' . $columns . ' FROM ' . $this->_db->getTablename($table);
        return $this;
    }
    
    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->_db->quote($v);
            }
        }
        
        return $data;
    }
    
    public function insert($table, $row) {
        $row = $this->_prepare($row);
        $this->_query = 'INSERT ' . $this->_db->getTablename($table);
        $this->_query .= ' (' . implode(', ', array_keys($row)) . ')';
        $this->_query .= ' VALUES (' . implode(', ', array_values($row)) . ')';
    }
    
    public function update($table, $set) {
        $set = $this->_prepare($set);
        $this->_query = 'UPDATE ' . $this->_db->getTablename($table) . ' SET';
        
        foreach ($set as $k => $v) {
            $this->_query .= " $k = $v,";
        }
        
        $this->_query = substr($this->_query, 0, -1);
        return $this;
    }
    
    public function delete($table) {
        $this->_query = 'DELETE ' . $this->_db->getTablename($table);
        return $this;
    }
    
    public function join($table, $condition, $type = 'INNER') {
        $this->_query .= ' ' . $type . ' JOIN ' . $this->_db->getTablename($table) . ' ON ' . $condition;
        return $this;
    }
    
    public function order($condition) {
        $this->_query .= " ORDER BY $condition";
        return $this;
    }
    
    public function group($group) {
        $this->_query .= " GROUP BY $condition";
        return $this;
    }
    
    public function where($condition) {
        $this->_query .= " WHERE $condition";
        return $this;
    }
    
    public function limit($offset, $limit = null) {
        $offset = (int) $offset;
        $this->_query .= ' LIMIT ' . (!is_null($limit) ? $offset . ', ' . intval($limit) : $offset);
        return $this;
    }
    
    public function __toString() {
        return $this->_query . ';';
    }
    
    public function query() {
        return $this->_db->query($this);
    }
    
    public function fetch() {
        $result = $this->query();
        return $this->_db->fetch($result);
    }
    
    public function fetchAll() {
        $result = $this->query();
        return $this->_db->fetchAll($result);
    }
}

?>



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public function select($table, $columns) {
        $query = new DBQuery($this);
        $query->select($table, $columns);
        return $query;
    }

    public function get($table, $columns = '*', $where = null) {
        $select = $this->select($table, $columns);
        
        if ($where) {
            $select->where($where);
        }
        
        return $select->fetch();
    }
    
    public function find($table, $id, $columns = '*') {
        return $this->get($table, $columns, 'id = ' . intval($id));
    }
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787215
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррр,

архитектура непонятная.
класс DBQuery - какая у него задача? построить валидный запрос!
зачем тогда ему знать о $_db ? зачем эта лишняя зависимость?
но даже если и так. зачем все эти private? почему вы запрещаете делать наследников расширяющих класс DBQuery? это осознанно или от непонимания?

- где возможность получить просто одно вычисленное значение, без всяких промежуточных объектов и массивов
- где защита от sql инъекций для селектов ?
- где поддержка union, having, вложенных запросов например
- где поддержка префиксов таблиц, и работа сразу с несколькими БД
- где биндинг

программисту кодить столько же, безопасности не прибавилось, гибкость пропала, лишние сущности появились а выгода от них непонятна. прозрачность перехода к БД с другим диалектом? хаха. ваш код к этому совершенно не готов. да и при необходимости этого, все равно пол-проекта придется преписывать учитывая особенности новые. ваш класс ничем тут не поможет

какая вообще выгода от вашего класса? отнаследоваться от тогоже pdo, расширить и увеличить абстракцию и то получится мощнее и безопаснее, и вся гибкость sql останется
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787232
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

Да просто, видимо, он недавно узнал про ООП и решил чего-нибудь налабать для теста и прокачивания скилла, заодно показать одноклассникам степень своей крутости. Все через это проходили :)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787354
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleОбсуждение было невозможно с самого начала, так что поддерживаю идею закрытия топика.
Все что можно было сказать, топикстартеру уже сказали, теперь начали повторяться.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787485
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u...

Почему получает при вызове конструктора в качестве параметра обьект базы(ссылку на обьект) - так же сроки эскейпется на стороне сервера, да и по-другому не получится писать так $query->select()->where()->fetch()

- где возможность получить просто одно вычисленное значение, без всяких промежуточных объектов и массивов

не понял

- где защита от sql инъекций для селектов ?

какая защита? фильтровать имена таблиц?

- где поддержка union, having, вложенных запросов например

мне они не нужны пока

- где поддержка префиксов таблиц, и работа сразу с несколькими БД

преффмксы есть, работа с несколькими БД тоже возможна

- где биндинг

prepared statements это изврат, они дают вымгрыш для приложений работающих постоянно в фоновом режиме (не аргумент для пэхэпэшных гуро наверника, типа пернатого из Новокузнецка)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787503
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррр- где возможность получить просто одно вычисленное значение, без всяких промежуточных объектов и массивов
не понял

$cnt = (int) $db->selectValue('SELECT count(*) FROM table WHERE flag=1');

Няша ррр- где защита от sql инъекций для селектов ?
какая защита? фильтровать имена таблиц?

$user = $db->select('users as u', 'u.name, r.name as role')->join('roles as r', 'u.role_id = r.id')->where('u.id = '.$_POST['uid'])->fetch();
где механизм позволяющий безопасно передавать переменные в запрос? может я проглядел?

Няша ррр- где биндинг
prepared statements это изврат, они дают вымгрыш для приложений работающих постоянно в фоновом режиме (не аргумент для пэхэпэшных гуро наверника, типа пернатого из Новокузнецка)

хотели критику? получили.
слушать её или наплевать - дело ваше
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787519
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u$cnt = (int) $db->selectValue('SELECT count(*) FROM table WHERE flag=1');


$cnt = $db->countAll('table', 'flag=1');
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787545
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррр,

вы на каждый запрос предложите написать отдельный метод? ))

а если надо
SELECT max(field) ...
SELECT (max(field)+min(field))/count(field) ...
...
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787546
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Няша ррр$cnt = $db->countAll('table', 'flag=1');

На выходе сразу int

Код: 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.
    public function buildQuery() {
        return new DBQuery($this);
    }
    
    public function select($columns = '*', $table = null) {
        $query = $this->buildQuery();
        $query->select($columns, $table);
        return $query;
    }

    // ...
    
    public function getAll($table, $columns = '*', $where = null, $offset = null, $limit = null, $order = null, $group = null) {
        $select = $this->select($columns, $table);
        
        if ($where) {
            $select->where($where);
        }
        
        if ($order) {
            $select->order($order);
        }
        
        if ($group) {
            $select->group($group);
        }
        
        if ($offset) {
            $select->limit($offset, $limit);
        }
         
        return $select->fetchAll();
    }



Фильтрацию для where модно сделать но тогда where будет передаваться как массив array('unescaped string', $arg1, $arg2, ...)
И синтаксис сделать типа такого ->where(array('id = %i', $_GET['id']))
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787554
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r uНяша ррр,

вы на каждый запрос предложите написать отдельный метод? ))

а если надо
SELECT max(field) ...
SELECT (max(field)+min(field))/count(field) ...
...

Код: php
1.
2.
3.
4.
    public function fetchOne($table, $column, $where = null) {
        $query = $this->select($column, $table)->where($where);
        return $this->one($query);
    }



Если одно надо получить

Код: php
1.
$v = $db->fetchOne($table, '(max(field)+min(field))/count(field)', $where);



Чото проблем особых не вижу
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787571
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррЧото проблем особых не вижу
проблема в том, что на каждый элементарный чих - приходится расширять и допиливать.
напрашивается вопрос - нафига такое щастье?

обсуждать действительно нечего. все вам уже сказали.
такие классы писали лет 5 назад. тогда это было модно и в тему.
рекомендую взять готовый класс или фреймворк. либо юзать pdo. там есть все и даже больше того что вы сможете допилить в своем классе
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787598
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> либо юзать pdo

в нем ничего нет ни оберток для инсертов и пр.. Фреймворки, посмотрел CodeIgniter как там все делается, так же через жопу. Нет спасибо.
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787612
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррр> либо юзать pdo
в нем ничего нет ни оберток для инсертов и пр..
ну вот их и напишите, какие нужны. это проще и продуктивнее получится
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787619
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша рррне аргумент для пэхэпэшных гуро наверника, типа пернатого из Новокузнецка
Арригато годзай мас, хотя я похапе вообще не знаю
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787646
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZНяша рррне аргумент для пэхэпэшных гуро наверника, типа пернатого из Новокузнецка
Арригато годзай мас, хотя я похапе вообще не знаю

тогда зачем своё очень важное мнение высказываешь?
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787660
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык название темы прочти, если забыл)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787847
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няша ррр,

Говно не обязательно пробовать на вкус, чтобы понять, что оно говно ;-)
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787892
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZ, троллота жырная пиши хомепаги на ASM'е

Код: 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.
$param = array('bla %i bla bla %s bla %i bla bla', 'foo', 'bar', '10');
echo($param[0]) . '<br>';

$parts = explode('%', $param[0]);

$i = 0;
$j = count($parts);

echo $parts[0];

while (++$i < $j) {
    switch ($parts[$i][0]) {
        case 'i':
            echo(intval($param[$i]));
            break;
        
        case 's':
            echo("'" . $param[$i] . "'");
            break;
    }
    
    echo substr($parts[$i], 1);
}

echo '<br>';



Код: sql
1.
2.
bla %i bla bla %s bla %i bla bla
bla 0 bla bla 'bar' bla 10 bla bla
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787924
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
    public function where($param) {       
        $this->_query .= ' WHERE ';
        
        if (is_array($param)) {
            if (count($param) > 1) {
                $parts = explode('%', $param[0]);
                $this->_query .= $parts[0];
                $i = 0;
                $j = count($parts);

                while (++$i < $j) {
                    switch ($parts[$i][0]) {
                        case 'i':
                            $this->_query .= intval($param[$i]);
                            break;

                        case 's':
                            $this->_query .= $this->_db->quote($param[$i]);
                            break;
                    }

                    $this->_query .= substr($parts[$i], 1);
                }
            } 
            else {
                $this->_query .= $param[0];
            }
        }
        else {
            $this->_query .= $param;
        }
        
        return $this;
    }
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787938
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
$user = $db->get('users', array('name = %s AND pass = %s', $_POST['name'], $_POST['pass']));



Мне тока не нравятся % они в LIKE используются, хотя если подумать то в строке могут быть любые символы и только идиоту придёт в голову такое делать
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37787968
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
40.
41.
42.
43.
44.
    public function where($param) {       
        $this->_query .= ' WHERE ';
        
        if (is_array($param)) {
            $i = count($param);
            
            if ($i > 1) {
                $parts = explode('%', $param[0]);
                $j = count($parts);
                
                if ($i != $j) {
                    throw new Exception("Wrong number of modifiers.");
                }
                
                $this->_query .= $parts[0];
                $k = 0;

                while ($j > ++$k) {
                    switch ($parts[$k][0]) {
                        case 'i':
                            $this->_query .= intval($param[$k]);
                            break;

                        case 's':
                            $this->_query .= $this->_db->quote($param[$k]);
                            break;
                        
                        default:
                            throw new Exception("Unknown modifier '{$parts[$k][0]}'.");
                    }

                    $this->_query .= substr($parts[$k], 1);
                }
            } 
            else {
                $this->_query .= $param[0];
            }
        }
        else {
            $this->_query .= $param;
        }
        
        return $this;
    }
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788000
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тест


Код: 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.
40.
41.
42.
43.
44.
45.
<?php

$gen_time = -microtime(1);

error_reporting(E_ALL);
set_time_limit(5);

require_once 'lib/magic_quotes_off.php';
require_once 'lib/bootstrap.php';
require_once 'lib/functions.php';

$base_url = '';
$title = '';
$keywords = '';
$description = '';
$js_arr = array();
$css_arr = array();
$js = '';
$css = '';
$out = '';
$routes = array();
$route = (string) @$_GET['route'];

echo '<pre>';
try {
    require 'lib/connect.php';
    
    if (0) $db = new MySQL; // хз что с NetBeans'ес не видит $db
    
    try {
        var_dump($db->get('pages', '*', array('alias = %s', 'TEST')));
        echo "\n{$db->lastQuery}";
    }
    catch (PageNotFound $e) {
        echo($e->getMessage());
    }   
}
catch (Exception $e) {
    echo($e->getMessage());
}

$gen_time += microtime(1);
echo "\n$gen_time";

?>



Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
array(6) {
  ["id"]=>
  string(1) "1"
  ["alias"]=>
  string(4) "test"
  ["title"]=>
  string(33) "Тестовая страница"
  ["keywords"]=>
  string(0) ""
  ["description"]=>
  string(0) ""
  ["content"]=>
  string(18) "

It's works!
"
}

SELECT * FROM t_pages WHERE alias = 'TEST';
0.0070171356201172



Код: php
1.
var_dump($db->get('pages', '*', array('alias = %s', "\0\"'")));



Код: html
1.
2.
3.
4.
bool(false)

SELECT * FROM t_pages WHERE alias = '\0\"\'';
0.0079951286315918
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788030
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
if (0) $db = new MySQL; // хз что с NetBeans'ес не видит $db



PHPDocumentor открой для себя
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788033
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хэйтерам пример, как все делается в калечнай магенте и я уже не говорю про жумлы и врот прессы http://www.excellencemagentoblog.com/magento-part7-series-models-sql-operations
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788037
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett
Код: php
1.
if (0) $db = new MySQL; // хз что с NetBeans'ес не видит $db



PHPDocumentor открой для себя

Он причем?

Вот lib/connect.php

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?php

$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'site';
$tables_prefix = 't_';

$db = new MySQL($db_host, $db_user, $db_pass, $db_name, $tables_prefix);
$db->setCharset('utf8');

?>



Я не понимаю чо не цепляет нетбинс если по коду ясно ctrl + space видит все свойства и методы, а так нет
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788040
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При том, чтобы вот такую фигню не писать, хотя бы

Код: php
1.
if (0) $db = new MySQL; // хз что с NetBeans'ес не видит $db



Код: php
1.
/** @var MySQL $db */
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788044
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
$route = (string) @$_GET['route'];


и логи медленно захламляются нотайсами
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788050
Ойоййооой!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Покритикуйте кот(оберька для MySQL)!
    #37788064
Няша ррр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HettПри том, чтобы вот такую фигню не писать, хотя бы

Код: php
1.
if (0) $db = new MySQL; // хз что с NetBeans'ес не видит $db



Код: php
1.
/** @var MySQL $db */



вот этого не знал

Модератор: Тема закрыта из-за многочисленных жалоб посетителей и не соблюдений правил форума, Black
...
Рейтинг: 0 / 0
133 сообщений из 133, показаны все 6 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте кот(оберька для MySQL)!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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