powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте кот(оберька для MySQL)!
25 сообщений из 133, страница 5 из 6
Покритикуйте кот(оберька для 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
25 сообщений из 133, страница 5 из 6
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте кот(оберька для MySQL)!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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