Форум на ПЫХА.РУ

Форум на ПЫХА.РУ

Пыхнуть хотите? => Готовые решения => Тема начата: vasa_c от 10 Февраль, 2008, 02:49:59



Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 10 Февраль, 2008, 02:49:59
Очередная вариация на бесконечную тему библиотек для работы с БД.
 
Документация и исходники — http://pyha.ru/go/godb/
 
Расширение над MySQLi
Облегчает интерфейс взаимодействия с БД.
Никакой дополнительной абстракции над SQL не строит.
 
- Упрощенное формирование запроса
- Упрощенный разбор результата
- Обработка ошибок на основании исключений
- Плюс еще несколько полезных фишек


Название: goDB — библиотека работы с MySQL
Отправлено: Timur от 16 Февраль, 2008, 03:25:57
Вопрос по количеству подключений - в mysqli оно всегда одно? Т.е. нужно ли самому делать синглтон или можно не заморачиваться по этому поводу?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 16 Февраль, 2008, 05:33:39
Возможно, не совсем точно понял вопрос.
 
Объекты, конечно, будут разные, и, даже, по ходу, подключения будут разные, даже для одинаковых параметров. Во всяком случае:
PHP

$db1 = new mysqli('localhost', 'test1', 'test1', 'test1');
$db2 = new mysqli('localhost', 'test1', 'test1', 'test1');
 
var_dump($db1->thread_id === $db2->thread_id)// false
var_dump($db1 === $db2);                        // false
 

Советую почитать раздел про пространство имен в либе. Может быть это и будет нужный тебе синглтон.


Название: goDB — библиотека работы с MySQL
Отправлено: Timur от 16 Февраль, 2008, 06:05:10
Блин, как же я умурился прозевать этот раздел?..
Спасибо, то что нужно :) А то я везде ставил new и думал, что так задумано...


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 19 Февраль, 2008, 04:56:24
(1.0.3) Пофиксены пара багов. Спасибо Тимуру


Название: goDB — библиотека работы с MySQL
Отправлено: Serj от 29 Февраль, 2008, 11:11:14
Почему не получается выполнить такой запрос, или как его заменить, помогите плз.
Text

$row4 = $db->query("SELECT ?c,  ?c?, ?c FROM ?t, ?t WHERE ?c=?i AND ?c=?c ORDER BY RAND() LIMIT 7",
Array("login", "avatar_preview", "friend_id", "users", "friends", "friends.id", $_GET['id'], "users.id", "friends.friend_id"), "assoc");
 

И как быть с этой контрукцией while($row4 = mysql_fetch_array($sql3)), чем её заменить?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 29 Февраль, 2008, 11:33:30
Почему не получается выполнить такой запрос, или как его заменить, помогите плз.
Сделайте:
PHP
$db->setDebug(true);
Тогда запросы будут выводится на экран. Посмотрите, сформировалось именно то что вам нужно?
 
И как быть с этой контрукцией while($row4 = mysql_fetch_array($sql3)), чем её заменить?
Так как вы указали третьим параметром в query() "assoc", то получаете в итоге ассоциативный массив. Можете перебрать его foreach'ем. Причем в таком случае можно вместо "assoc" использовать "iassoc".


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 29 Февраль, 2008, 01:47:00
Serj,
PHP
var_dump($row4);


Название: goDB — библиотека работы с MySQL
Отправлено: Serj от 29 Февраль, 2008, 03:10:49
Помойму ошибка в `users.id`=`friends.friend_id`. Unknown column 'friends.id'. Должно ведь разбиваться как `users`.`id`=`friends`.`friend_id`?
 
Извините, а как работать с var_dump ?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 29 Февраль, 2008, 03:41:13
А да.
Разбиваться не должно. Либо передавайте в качестве столбца массив (таблица, столбец), либо напрямую вписывайте столбец в SQL-запрос.
Исключение то генерируется?


Название: goDB — библиотека работы с MySQL
Отправлено: Serj от 29 Февраль, 2008, 03:50:22
Спасибо! Разбил вот так ?t.?c=?t.?c . Объясните ещё пожалуйста var_dump, как с ней быть?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 29 Февраль, 2008, 03:54:46
Что такое var_dump написано в документации по ней.
adword хотел сказать, что с помощью её вы могли бы разобраться в полученной структуре и решить чем же заменять mysql_fetch_array


Название: goDB — библиотека работы с MySQL
Отправлено: Serj от 29 Февраль, 2008, 03:56:15
Понял, спасибо.


Название: goDB — библиотека работы с MySQL
Отправлено: Serj от 07 Март, 2008, 10:00:11
Помогите пожалуйста!
Вчера тестили сайт, вылетела такая ошибка:
 
Fatal error: Uncaught exception 'goDBExceptionConnect' with message 'Host '111.162.7.9' is not allowed to connect to this MySQL server' in /sata1/home/users/lalala/www/www.lalala.org/godb.php:35 Stack trace: #0 /sata1/home/users/lalala/www/www.lalala.org/mysql.php(3): goDB->__construct('db.lalala.co...', 'логин', 'пароль', 'база') #1 /sata1/home/users/lalala/www/www.lalala.org/auth_index.php(4): include('/sata1/home/use...') #2 /sata1/home/users/lalala/www/www.lalala.org/head.php(2): include('/sata1/home/use...') #3 /sata1/home/users/lalala/www/www.lalala.org/lalala.php(2): include('/sata1/home/use...') #4 {main} thrown in /sata1/home/users/lalala/www/www.lalala.org/godb.php on line 35
 
Как можно отключить такие сообщения, помойму не очень хорошо, что светится логин пароль к базе?


Название: goDB — библиотека работы с MySQL
Отправлено: Timur от 07 Март, 2008, 10:46:12
Serj, почитай раздел документации Сообщения об ошибках и f.a.q - Обработка исключений в php


Название: goDB — библиотека работы с MySQL
Отправлено: Serj от 07 Март, 2008, 10:56:30
Сенкс ;)


Название: goDB — библиотека работы с MySQL
Отправлено: roksar от 12 Август, 2008, 09:03:38
Почему в запросе query('SELECT COUNT(*) FROM ?t',array('news'),'no'); возвращается просто объект?
 
//пс. поставил 'el' теперь работает правильно..жаль что такой хорший класс не развиваеться..и мануал скудный


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 12 Август, 2008, 09:41:17
roksar, он не скудный, он краткий! Ничего лишнего и все по существу. А чего именно в мануале не хватает?


Название: goDB — библиотека работы с MySQL
Отправлено: roksar от 12 Август, 2008, 09:54:29
Он по существу я согласен и сделан грамотно, но живых примеров надо побольше, какой разбор где лучше применять (я имею ввиду конкретные примеры а не описание их работы) см. пример описания класса dbsimple :)


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 12 Август, 2008, 10:02:10
roksar, по поводу примеров поддерживаю, больше примеров это только к лучшему! ;)


Название: goDB — библиотека работы с MySQL
Отправлено: bvn от 22 Сентябрь, 2008, 11:30:10
Есть предложение немного расширить функциональность модуля. Не знаю, почему автором была проигнорирована столь удобная функциональность, предоставляемая методом fetch_object... Я без претензий на соавторство, прошу рассмотреть возможность применения следующего патча (см. вложение), оформленного в виде diff-файла. Собственно, не знаю, какие мотивы мною движут, есть ли в них хоть доля тщеславия ;) ведь ничто не мешает мне юзать втихаря у себя исправленную версию, но что-то заставляет меня поделиться с миром данными исправлениями. Буду очень рад, если эти исправления будут учтены :)
 
PS: Ах, да, чуть не забыл. За сам модуль огромное спасибо, я не далее как неделю назад изобрел свой велосипед для старого mysql, а потом понял, что есть mysqli и собирался изобретать подобный же велосипед для него, а оказалось, что есть готовый вполне рабочий велосипед :) За него автору низкий поклон, вот если бы еще глянуть в сторону dbal... пока для себя не определился, что можно в этой обалсти заюзать готовенького :)


Название: goDB — библиотека работы с MySQL
Отправлено: von-hamster от 02 Октябрь, 2008, 05:38:01
По поводу расширения функционала есть еще предложение (я у себя поправил).
 
Предистория: нужно делать инсерт с заранее неизвестным количеством полей (ну или влом перечислять вначале поля, а потом подставлять массив результатов). Идею взял из dbsimple.
 
Было раньше:
PHP
$db->query("insert into ?t (?c,?c,?c) values(?i,?i,?i)", Array("table", "one", "two", "three", 1, 2, 3));

При этом чтобы добавить поле нужно было добавить ?с и ?i Ну или если запрос:
PHP
$db->query("insert into ?t (?c,?c,?c) values(?a)", Array("table", "one", "two", "three", array(1, 2, 3)));

После моих изменений можно сделать так:
PHP
$db->query("insert into ?t (?ca) values (?a)", Array("table", array("one", "two", "three"), array(1, 2, 3)));

Ну или как я обычно делаю:
PHP

$insert = array("one" => 1,
                     "two" => 2,
                     "three" => 3,
);
$db->query("insert into ?t (?ca) values (?a)", Array("table", array_keys($insert), array_values($insert)));
 

При этом, если изменить таблицу (добавить поле) - достаточно добавить запись в массив...
 
Вобщем, если кому так будет удобно, то вносим следующие изменения:
1. добавить в private function _makeQuery($ph) после описания case ('c'): ...
 
PHP

            case ('ac'):
            case ('ca'):
                foreach ($el as &$e) {
                    $e = "`{$e}`";
                }
                return implode(',', $el);
 

2. Добавить в регэксп в public function makeQuery($pattern, $data, $prefix = '') одну букву с во вторые скобки, чтобы получилось следующее:
PHP

$q = @preg_replace_callback('/\?([int?ca]?[inac]?);?/', Array($this, '_makeQuery'), $pattern);
 
       
И все...
 
ЗЫ... В этом случае, нельзя указать таблицу для поля, кроме как вручную без крайних апострофов, например (один из вариантов),
PHP

$insert = array("table`.`one" => 1,
                     "table`.`two" => 2,
                     "table`.`three" => 3,
);
$db->query("insert into ?t (?ca) values (?a)", Array("table", array_keys($insert), array_values($insert)));
 
Ну или
PHP

$table = 'table';
$insert = array("{$table}`.`one" => 1,
                     "{$table}`.`two" => 2,
                     "{$table}`.`three" => 3,
);
$db->query("insert into ?t (?ca) values (?a)", Array($table, array_keys($insert), array_values($insert)));
 


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 02 Октябрь, 2008, 05:49:15
von-hamster, да, бывает иногда не хватает....
 
PHP
$db->query("insert into ?t (?ca) values (?a)", Array("table", array("one", "two", "three"), array(1, 2, 3)));
а как данный запрос оформить?
Text
insert into `table` set `one` = 1, `two` = 2, `three` = 3
тоже самое и с update


Название: goDB — библиотека работы с MySQL
Отправлено: von-hamster от 03 Октябрь, 2008, 09:44:43
Например, так:
 
1. в в private function _makeQuery($ph):
PHP

            case ('sa'):
                foreach ($el as $k => &$e) {
                    $e = "`{$k}` = '" . $this->real_escape_string($e) . "'";
                }
                return implode(',', $el);
 

2. в public function makeQuery($pattern, $data, $prefix = '')
PHP
        $q = @preg_replace_callback('/\?([int?cas]?[inac]?);?/', Array($this, '_makeQuery'), $pattern);

Тогда запрос будет выглядеть, как:
PHP

$insert = array("one" => 1,
                     "two" => 2,
                     "three" => 3,
);
$db->query("UPDATE ?t SET ?sa;", Array("table", $insert));
 

Но в этом случае, все значения заключаются в одинарные кавычки, что для числовых значений mysql вобщем-то не критично...
 
Вообще слишком много получается букав для плейсхолдеров - можно запутаться...
Например, для порядка лучше оставить только один вариант двойных...


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 03 Октябрь, 2008, 09:58:39
Вообще слишком много получается букав для плейсхолдеров - можно запутаться...
Например, для порядка лучше оставить только один вариант двойных...

угу. и я об этом


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 12 Ноябрь, 2008, 06:35:06
Ждал и надеялся, что в ближайшее выйдет таки 5.3, чтобы переписывать библиотечки уже под него. Как видно, надеялся зря. Поэтому перепишу goDB под старый добрый 5.2.
 
TODO на версию 1.1. Кто заинтересован, дополняйте.
 
1. Сделать отложенное подключение к базе (если в сценарии запросов может вообще не быть):
PHP

$db = new goDB($host, $username /*, ... */ )
/* ... */
$db->query($query); // Подключение происходит только здесь
 

2. Возможность передавать параметры подключения также и в виде ассоциативного массива. Как в конструктор, так и в makeDB.
PHP

$configDB = Array(
    'host'     => 'localhost',
    'username' => 'vasa',
    'passwd'   => 'peta',
);
/* ... */
$db = new goDB($configDB);
 

3. Возможность использовать sizeOf() и count() так же и для результатов-итераторов. Сейчас только $res->count().
 
4. Наследовать исключений не от Exception, а от LogicException
 
5. Плейсхолдер "?set":
PHP

$set = Array(
    'one' => 1,
    'two' => 2,
    'three' => 3,
);
$db->query('UPDATE `table` SET ?set WHERE `id`=?i', Array($set, $id)); // `one`=1,`two`=2,`three`=3
 

6. Плейсхолдер "?where". Для раздела WHERE. Хз пока как лучше.
 
7. Метод insertRows() для запросов типа:
SQL

INSERT INTO `table` (`one`,`two`) VALUES (1,2), (3,4), (5,6)
 

Два варианта:
PHP

// 1
$cols = Array('one', 'two');
$values = Array(Array(1,2), Array(3,4), Array(5,6));
$db->insertRows('table', $cols, $values);
 
// 2
$rows = Array(
    Array(
        'one' => 1,
        'two' => 2,
    ),
    Array(
        'one' => 3,
        'two' => 4,
    ),
);
$db->insertRows('table', $rows);
 

8. Форматы результата "kcol", "kassoc", "krow". Вместо порядковых массивов в качестве ключа используется значение первого столбца (обычно это `id`).
 
9. Что-нибудь по транзакциям. Возможно, сопру у AlexB.
 
10. Что-нибудь по мультизапросам.


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 12 Ноябрь, 2008, 07:26:24
vasa_c, плейсхолдеры:
 

для списков ?a
для хэшей ?h
для двумерных массивов ?sa (можно и по другому)

?set == ?h
?where - не надо
insertRows() - не надо, для него есть ?sa


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 12 Ноябрь, 2008, 07:27:23
Вообще ?a лучше бы быть ?l... но для совместимости лучше оставить


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 09 Декабрь, 2008, 07:07:51
Так как goDB2.0 с кучей всякого барахла откладывается в силу действия сил неодолимого характера (неодолимая лень), выкладываю промежуточную 1.1
 
Плейсхолдер ?s - раздел SET
 
PHP

$set = Array(
    'one'   => 1,
    'two'   => 'two',
    'three' => null,
    'four'  => 'f"our"'
);
 
$pattern = 'INSERT INTO `table` SET ?s';
$data    = Array($set);
 
$db->query($pattern, $data);
 

SQL

INSERT INTO `table` SET `one`="1",`two`="two",`three`=NULL,`four`="f\"our\""
 

 
Плейсхолдер ?v - много строк одним INSERTом
 
PHP

$values = Array(
    Array(1, 2, 3),
    Array(3, 4, 5),
    Array(6, 7, 8),
);
 
$pattern = 'INSERT INTO `table` (`one`,`two`,`three`) VALUES ?v';
$data    = Array($values);
 
$db->query($pattern, $data);
 

SQL

INSERT INTO `table` (`one`,`two`,`three`) VALUES ("1","2","3"),("3","4","5"),("6","7","8")
 

 
Результат в виде объекта
 
Для особых гурманов добавлены форматы разбора - "object", "rowobject", "iobject"
 

Выборка переменных
 
Добавлен формат разбора "vars". При выборке по двум столбцам, первый становится ключем, второй - значением.
 
Например, таблица переменных связанных с пользователем:
SQL

CREATE TABLE `users_vars` (
    `user`  INT UNSIGNED NOT NULL,
    `name`  VARCHAR(50) NOT NULL,
    `value` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`user`,`name`)
);
 

Выбираем переменные принадлежащие пользователю в ассоциативный массив:
PHP

$vars = $db->query('SELECT `name`,`value` FROM `users_vars` WHERE `user_id`=?i', Array($userId), 'vars');
 

 
Интерфейс countable для итераторов
 
Теперь получать количество записей в итераторах ("iassoc", "irow", "icol", "iobject") можно, как и в обычных массивах - count($result).
 

Формат подключения
 
Ещё один вариант конструктора - ассоциативный массив одним аргументом. Удобно при хранении конфигурации в массивах.
 
PHP

/* Конфигурационный массив */
$configDB = Array(
    'host'     => 'localhost',
    'username' => 'user',
    'passwd'   => 'qwerty',
    'dbname'   => 'db',
    'prefix'   => 'prefix_',
);
 
/* Старый вариант */
$db = new goDB($configDB['host'], $configDB['username'], $configDB['passwd'], $configDB['dbname']);
if ($configDB['prefix']) {
    $db->setPrefix($configDB['prefix']);
}
 
/* Новый вариант */
$db = new goDB($configDB);
 

Возможные поля конфигурационного массива - host, username, passwd, dbname, port, socket (аргументы конструктора), prefix, debug (сами догадайтесь).
Все поля необязательны.
 
Так же массив можно использовать при создании БД в пространстве имён:
PHP
goDB::makeDB($configDB);
Но аргументы $name (имя базы) и $postmake (отложенное подключение) должны идти полями массива.
 

Порт в хосте
 
В любом из вариантов создания базы порт можно указывать в параметре host ("localhost:3307").
 

Ассоциация баз в пространстве имён
 
На сайте используется две базы (теоретически):
PHP

$db1 = goDB::makeDB($host, $username, $passwd, $dbname, 'base'); // Основная база
$db2 = goDB::makeDB($host, $username, $passwd, $dbname, 'forum'); // База форума
 

Хотим указать, чтобы форум использовал основную базу:
PHP

$db1 = goDB::makeDB($host, $username, $passwd, $dbname, 'base'); // Основная база
$db2 = goDB::assocDB('forum', 'base'); // Ассоциировали их
goDB::queryDB($pattern, $data, $fetch, null, 'forum'); // Запросы пойдут к основной базе
 

 
Декоратор запросов
 
PHP
goDB::queryDecorated("wrapper");

Теперь все запросы через query() будут валиться первым делом в функцию wrapper.
 
PHP

function wrapper($query, $fetch)
{
    print 'Запрос: '.$query.'<br />';
    print 'Разбор: '.$fetch.'<br />';
    return true;
}
 

Запрос приходит уже сформированным (pattern + data). Его можно изменить:
 
PHP

function wrapper(&$query, $fetch)
{
    $query = 'TRUNCATE TABLE `users`'; // В итоге выполнится эта гадость
    return true;
}
 

Если вернуть false, то запрос не будет выполнен.
 

По мелочам
 
Имена итераторов скопипастил из старого в виде DBResult, теперь исправил на goDBResult.
goDBException наследуется от LogicException.


Название: goDB — библиотека работы с MySQL
Отправлено: Timur от 09 Декабрь, 2008, 07:29:14
гуд! )


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 10 Декабрь, 2008, 01:12:59
vasa_c,
Текущая версия: 1.1
- пиши дату релиза
:)


Название: goDB — библиотека работы с MySQL
Отправлено: von-hamster от 22 Январь, 2009, 11:31:31
Мысли по поводу библиотечки.
 
1. Всетаки очень большое количество плейсхолдеров. Мне кажется - библиотечка должна сама разбираться, что ей дают (типа как в dbsimple). Например,
? - если строка -> 'значение'
  - если массив -> 'значение1','значение2'...
?# - тоже самое, только заключаем в апострофы
?a - рассматривать как ассоциативный массив - типа ключ - значение. Меняется на `ключ`='значение',...
?i - массив для инсерта, тоесть типа array('key'=> array(value1, value2 ...), 'key2' => array(value21, value22 ...)) меняется на ('key1', 'key2'..) values ('value1', 'value2'...),('value21', 'value22'...) или как вариант array(array('key1'=>value1, 'key2'=>value2, ), array('key1'=>value21, 'key2'=>value22, ))
 
2. селекты разделить, как в той-же dbsimple, тоесть сделать selectcell, selectrow, selectcol, либо добавить обертки... ИМХО гораздо удобнее, чем параметр...


Название: goDB — библиотека работы с MySQL
Отправлено: CTAPbIu_MABP от 22 Январь, 2009, 11:38:23
von-hamster, а зачем писать вторую бдсимпл?


Название: goDB — библиотека работы с MySQL
Отправлено: von-hamster от 22 Январь, 2009, 01:32:36
1. Он особо не развивается
2. нет адаптера для mysqli
3. ИМХО там более удобный интерфейс
 
Писать не надо, нужно использовать только интерфейс.


Название: goDB — библиотека работы с MySQL
Отправлено: ghost от 24 Январь, 2009, 05:02:33
походу а почему всё наследуется от LogicException ?
отсутствие конекта к бд например..


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 24 Январь, 2009, 10:05:50

походу а почему всё наследуется от LogicException ?
отсутствие конекта к бд например..
потому что и моск наследуется от LogicException


Название: goDB — библиотека работы с MySQL
Отправлено: ghost от 24 Январь, 2009, 03:56:56
зашибись.
то что сервер мускла лежит - ошибка безусловно логическая


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 24 Январь, 2009, 07:53:26
просто я так вижу мир :)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 24 Январь, 2009, 08:41:20
походу а почему всё наследуется от LogicException
Потому что всё ломало исправить... думал не найдут черти. нет, госту нужно таки в код лезть :)
ИМХО гораздо удобнее, чем параметр...
Удобство вещь относительная. Если бы мне была удобна dbsimple я бы своего и не делал :)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Январь, 2009, 07:46:06
1.1.1:
1. Все исключения таки от RuntimeException.
2. Имена таблиц можно заключать в {}, тогда добавляются префиксы.
PHP

$db->setPrefix('prefix_');
 
/* ?t - когда имя таблицы берётся из переменной */
$db->query('SELECT * FROM ?t WHERE `id`=?i', Array($tableName, $id));
 
/* SELECT * FROM `prefix_table` WHERE `id`=хз */
$db->query('SELECT * FROM {table} WHERE `id`=?i', Array($id));
 


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 07:49:11
$db->query('SELECT * FROM {table} WHERE `id`=?i', Array($id));
 
Array($id) - шо за хуйня? сделай уж просто $id


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 28 Январь, 2009, 07:52:39

Array($id) - шо за хуйня? сделай уж просто $id
Да нафиг надо лишние проверки в коде городить. То что здесь плейсхолдер один - это частный случай.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 07:54:58


Array($id) - шо за хуйня? сделай уж просто $id
Да нафиг надо лишние проверки в коде городить. То что здесь плейсхолдер один - это частный случай.
хз, можно и без проверок :-D
 
главное знать как!


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 28 Январь, 2009, 07:56:54
Как без проверок?
Я имел ввиду проверки в коде либы, если что .....


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 07:57:12
главное знать как!
что знать?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Январь, 2009, 07:57:19
не, нах, не поступимся стандартами и понятностью ради мимолётного удобства :)


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 07:57:27

Как без проверок?
Я имел ввиду проверки в коде либы, если что .....
+1
 


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 07:57:55
vasa_c, :D


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Январь, 2009, 07:58:06
Ипать. написал одну строчку - жму отправить "пока вы писали новый ответ", жму ещё раз - "пока вы писали новый ответ". дом флудера-25 :)


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 07:59:34
PHP

$params = func_get_args();
$sql = array_shift($params); //sql
$params // сейчас ваш массив.
 

проверки? где?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Январь, 2009, 08:02:19
phpdude, там после параметров ещё аргументы в query()


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 08:08:53

phpdude, там после параметров ещё аргументы в query()
нах там параметры?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Январь, 2009, 08:35:06
Вырази свой подход на примерах :)


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 08:41:32
да легко!
 
PHP
$items = $db->sql2arr("SELECT * FROM `#__news` WHERE `date`<{0} ORDER BY `date` DESC LIMIT 0,5",time());


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 08:44:22
phpdude, а что тут происходит можешь описать?


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 08:46:12
sql2arr - кто это?
`#__news` - жесткая конструкция, во что это будет преобразовываться?
{0} - кто это?
time() - зачем?


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 08:47:29

phpdude, а что тут происходит можешь описать?
выбираю из новостей те, у которых дата меньше чем сейчас ... уевый запросец попался, видимо мой программист писал :-D, либо я пьный был ... выбираются первые 5 сортированые по дате.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 08:48:48

sql2arr - кто это?
`#__news` - жесткая конструкция, во что это будет преобразовываться?
{0} - кто это?
time() - зачем?
 

вместо {0} = time() {0},{1},{2} ... - первый, второй, третий и тп параметры после первого, первый - скл запрос.
 
#__ = table prefix.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 08:49:22
#__ = тупо реплейсится на $db->prefix , ничего страшного! ))))))))


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 08:54:02
"#_" - тоже занято?)
а преобразования к числу и экранирование как делаешь?


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 08:55:06
phpdude, посмотри http://pyha.ru/go/godb/intro/


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 08:58:16

"#_" - тоже занято?)
а преобразования к числу и экранирование как делаешь?
нахуй к числу преобразовывать, мускулю посрать '10' = 10 :) ? #_ - исторически неподходило :)


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 08:59:46

phpdude, посмотри http://pyha.ru/go/godb/intro/

), 'el'
это нахуй?


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 09:13:15


"#_" - тоже занято?)
а преобразования к числу и экранирование как делаешь?
нахуй к числу преобразовывать, мускулю посрать '10' = 10 :) ? #_ - исторически неподходило :)
чтобы тебе вместо числа гамно не заслали... а ты как преобразовываешь?
 

), 'el'
это нахуй?

Форматы разбора


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 09:19:52
чтобы тебе вместо числа гамно не заслали... а ты как преобразовываешь?

и чо что зашлют?)
 
оно отэкранируется да просто будет $user = $db->sql2arr("select * from #__users where id={0}",$_GET['userid']);
 
тогда просто на след строке свалится if(!$user) {die("der fucking GET!");}


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Январь, 2009, 10:30:10
phpdude, ну давай другой пример... я о sql inj говорю, и ты меня понимаешь... представь пример, где допустима инъекция.
и теперь два вопроса, на которые ты не отвечаешь...
а преобразования к числу и экранирование как делаешь?
а ты как преобразовываешь?


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 10:46:08

phpdude, ну давай другой пример... я о sql inj говорю, и ты меня понимаешь... представь пример, где допустима инъекция.
и теперь два вопроса, на которые ты не отвечаешь...
а преобразования к числу и экранирование как делаешь?
а ты как преобразовываешь?
хм .. у меня недопустимы инъекции :) допустимо что результат вернет 0 строк, но инъекция никогда, если конечно запрос не был кустарно создан :)


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 10:46:49
а ты как преобразовываешь?
я ничего не преобразовываю, ну пусть падонок поищет select * from users where id='\';select * from admins';


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Январь, 2009, 10:47:02

а ты как преобразовываешь?
я ничего не преобразовываю, ну пусть падонок поищет select * from users where id='\';select * from admins';
мне вот ни похуй :) залогиниться то не сможет же ;)


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 29 Январь, 2009, 12:09:15
phpdude, забей.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 29 Январь, 2009, 12:28:10

phpdude, забей.
да сер!


Название: goDB — библиотека работы с MySQL
Отправлено: Batler от 01 Февраль, 2009, 05:49:31

нахуй к числу преобразовывать, мускулю посрать '10' = 10 :)

Если столбец числового типа, то MySQL тратит время на приведение типа (строка -> число)


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 01 Февраль, 2009, 07:27:35


нахуй к числу преобразовывать, мускулю посрать '10' = 10 :)

Если столбец числового типа, то MySQL тратит время на приведение типа (строка -> число)
и ты в это веришь? какты думаешь, что дольше будет обрабатываться? мой этот костыль, или твои хуево написанные запросы? :)


Название: goDB — библиотека работы с MySQL
Отправлено: Batler от 01 Февраль, 2009, 08:02:56
Хм, я запросов никаких не писал...
И про время выполнения запросов тоже...


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 01 Февраль, 2009, 08:06:41
ну тогда и рассуждать ненад чем )))
даже регулярка для преобразования строки в инт, а там 100% не регулярка, это ничто по сравнению с даже простым select * from users where id=x


Название: goDB — библиотека работы с MySQL
Отправлено: Batler от 01 Февраль, 2009, 08:16:11
Про инт тоже не было ни слова =)
Кстати говоря, так или иначе приведение типов делаешь либо в php либо отдаешь это на усмотрение MySQL.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 01 Февраль, 2009, 09:28:31

Про инт тоже не было ни слова =)
Кстати говоря, так или иначе приведение типов делаешь либо в php либо отдаешь это на усмотрение MySQL.
повторюсь, я не делаю приведение типов.


Название: goDB — библиотека работы с MySQL
Отправлено: Batler от 01 Февраль, 2009, 09:50:56
Значит MySQL делает это за тебя...


Название: goDB — библиотека работы с MySQL
Отправлено: aivee от 01 Февраль, 2009, 10:25:14
приведение типов
а что это?


Название: goDB — библиотека работы с MySQL
Отправлено: md5 от 01 Февраль, 2009, 10:29:32
casper :)


Название: goDB — библиотека работы с MySQL
Отправлено: ghost от 01 Февраль, 2009, 10:51:11
угу.. приведение получается кастованием.. если маны хватает :)


Название: goDB — библиотека работы с MySQL
Отправлено: Batler от 02 Февраль, 2009, 08:22:38

приведение типов
а что это?
Прикалываешься? =)


Название: goDB — библиотека работы с MySQL
Отправлено: aivee от 24 Февраль, 2009, 02:13:05
типа циферку привести к типу int?


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 24 Февраль, 2009, 02:20:57
до типа цифорку)


Название: goDB — библиотека работы с MySQL
Отправлено: tenzor от 07 Март, 2009, 03:07:21
Либа замечательная, только совсем недавно выплыл неприятный баг на 32битной машине.
если пользуем плейсхолдер ?i (и подобные) и передаем большое число, например 5ГБ в байтах, то в базу падает черти что. Виной тому intval()
 
Собственно у себя проблему решил заменой intval на 0+$var;


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 07 Март, 2009, 04:04:50
tenzor, спасибо


Название: goDB — библиотека работы с MySQL
Отправлено: tenzor от 08 Март, 2009, 02:46:36
И еще такой момент. Может быть для эксепшенов стоит добавить вызов конструктора родителя? parent::__construct, чтобы можно было получить текст ошибки через $e->getMessage()?
например в goDBExceptionQuery


Название: goDB — библиотека работы с MySQL
Отправлено: aivee от 09 Март, 2009, 02:42:00
vasa_c, не исправил?


Название: goDB — библиотека работы с MySQL
Отправлено: aivee от 09 Март, 2009, 06:30:25
на 142 строке нотис Trying to get property of non-object
сам запрос
PHP
       $this->db->query('insert into ?t (`name`, `short`, `full`, `caption`, `link`) values (?, ?, ?, ?, ?)', array($this->table, $name, $short, $full, $caption, $link), 'assoc');

что это может быть?
 
доперло, последний аргумент лишний


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 10 Март, 2009, 03:04:12
1.1.2
 
1. ?i работает с числами больше 2^32
2. сообщение об ошибке из исключения goDBExceptionQuery можно получить через $e->getMessage(), $e->getCode() возвращает mysql-код ошибки.
хотя с исключениями я переборщил - все они Runtime и столько их нафиг не нужно
3. ещё маленький глючок.


Название: goDB — библиотека работы с MySQL
Отправлено: tenzor от 11 Март, 2009, 09:36:45
3. ещё маленький глючок.
а это где?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 11 Март, 2009, 09:41:50
в 267 строке - self::$baseName


Название: goDB — библиотека работы с MySQL
Отправлено: tenzor от 12 Март, 2009, 11:36:51
и еще такой момент.
В отладочную функцию предлагаю передавать время выполнения запроса :) Ну, для отладки.


Название: goDB — библиотека работы с MySQL
Отправлено: Baboot от 06 Май, 2009, 01:29:59
У меня такой вопрос(сейчас понимаю в меня полетят палки и ссылания на то что ламер =) ):
вот собсно функция:
 
Text
function addRec($arr)
 
        $sql = "INSERT INTO catalog(?a;) VALUES(?a;)";
        $this->query($sql,array(array_keys($arr),array_values($arr)));
    }
 
И соответственно ошибка выполнения sql скрипта:
 

Fatal error: Uncaught DB Error. Query="INSERT INTO catalog("name","parent") VALUES("test3\'ds:d","0")" error = 1064 "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"name","parent") VALUES("test3\'ds:d","0")' at line 1"
Я понимаю что ошибка из-за двойных кавчек, я конечно могу дописать ф-ю которая будет все " на ' заменять, но вопрос почему именно двойные кавычки?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 06 Май, 2009, 01:48:58
?a предназначен для вставки данных (они в кавычки и заключаются).
Вы же пытаетесь использовать его для вставки списка столбцов.
 
В вашем случае, если $arr имеет формат "столбец"=>"значение" будет удобным использование ?s:
PHP
$pattern = 'INSERT INTO `catalog` SET ?s';
$data     = Array($arr);
$this->query($pattern, $data);


Название: goDB — библиотека работы с MySQL
Отправлено: md5 от 06 Май, 2009, 02:15:28
а зачем там точка  с запятой после ?a ?


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 06 Май, 2009, 02:24:41
md5, типа есть такая возможность, для введения однозначности... но это условие не обязательно
Почитай в самом низу http://pyha.ru/go/godb/query/


Название: goDB — библиотека работы с MySQL
Отправлено: md5 от 06 Май, 2009, 03:19:37
ух, как все неоднозначно!


Название: goDB — библиотека работы с MySQL
Отправлено: Trent от 16 Сентябрь, 2009, 11:22:59
Запихиваю в бд serialized строку. Однако, в бд записывается что-то вроде
Text
a:1:`i:0;d:1;`
Откуда "`"? Это goDB или что-то еще?
 
PS
 
Вывод запроса до записи в базу выдает нормальную строку.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 16 Сентябрь, 2009, 01:52:29
Как записываете? Как выводите? Как проверяете?


Название: goDB — библиотека работы с MySQL
Отправлено: Trent от 16 Сентябрь, 2009, 01:56:44
Все, разобрался. В этот раз забыл про плейсхолдеры, а goDB, оказывается, заменяет скобки =)


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 12 Ноябрь, 2009, 09:50:39
Ничего понять не могу проблема такая
 
Вот такой запрос private $sql = array("selectId" => "SELECT `id`, `parent`, `alias` FROM `site_content` WHERE `id` in (?a;);");
 
Вот так вызываем print_r($this->query($this->sql['selectId'], array(0,1,2,3,4,5), "assoc"));
 
Работает все верно в режиме дебаг выдает SELECT `id`, `parent`, `alias` FROM `site_content` WHERE `id` in ("0","1","2","3","4","5");
 
Как только меняю запрос на private $sql = array("selectId" => "SELECT `id`, `parent`, `alias` FROM `site_content` WHERE `alias` in (?a;);");
 
Выдает ошибку Illegal mix of collations for operation ' IN ' в режиме дебаг SELECT `id`, `parent`, `alias` FROM `site_content` WHERE `alias` in ("0","1","2","3","4","5");
 
При этом копирую результат дебага запускаю в phpmyadmin все работает получается верный запрос вызывает ошибку.
 
Приэтом запрос "SELECT `id`, `parent`, `alias` FROM `site_content` WHERE `parent` in (?a;);" тоже работает без ошибок
 
Тип полей id, parent - int; поля alias - varchar
 
Вот такая ерунда.
 


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 12 Ноябрь, 2009, 10:17:23
Попробуйте в скрипте указать нужную кодировку $db->set_charset.


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 12 Ноябрь, 2009, 10:59:13
Text
        parent::set_charset("cp1251");
        $this->setDebug(true);
        try{
            print_r($this->query($this->sql['selectId'], array(array(0,1,2)), "assoc"));
        } catch (goDBExceptionQuery $e){echo $e->error();}
 

вызываю так ошибка таже
 
использую другую библиотеку все работает ничего понять не могу.
 

еще не разбирался с mysqli использовал mysql может где ошибку допустил но
не parent::set_charset("cp1251"); не $this->set_charset("cp1251"); не работает
кому не лень укажите на ошибку

 
зато работает вариант
$this->query('SET NAMES "cp1251"');
и запрос проходит без ошибок


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 12 Ноябрь, 2009, 11:04:22
У меня есть сомнения, что проблема именно в библиотеке.
Запрос формируется верно.
Illegal mix of collations — проблема в кодировках.
В майадмине всё нормально, в сценарии нет — видимо в майадмине одни настройки при подключении, у вас другие.
 
Какой "collation" ("сравнение") в майадмине для `alias` показывается? Случаем не latin какой-нибудь?
Спустя 4 минуты 10 секунд добавил
Странно, в доке написано:
Note: This is the preferred way to change the charset. Using mysqli::query() to execute SET NAMES ..  is not recommended.

Правда, там же:
Note: To use this function on a Windows platform you need MySQL client library version 4.1.11 or above (for MySQL 5.0 you need 5.0.6 or above).
У вас какая версия?
 
Как говорится, раз работает — не трогайте :)
 


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 13 Ноябрь, 2009, 12:16:05
Note: To use this function on a Windows platform you need MySQL client library version 4.1.11 or above (for MySQL 5.0 you need 5.0.6 or above).
версия MySQL 4.1.8-max
 
получается в этом причина того что не работает parent::set_charset("cp1251"); платформа то тоже windows на локале пока.
 
тогда не понятно чем предпочтительней mysqli::query() если SET NAMES универсальнее
 
Случаем не latin какой-нибудь?
нет cp1251_general_ci


Название: goDB — библиотека работы с MySQL
Отправлено: CTAPbIu_MABP от 13 Ноябрь, 2009, 12:21:34
in (?a;);"

у тебя там две ; они не лишнии случаем?


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 13 Ноябрь, 2009, 12:52:01
нет не лишнии разобрался все прекрасно работает
 
подключаюсь так
 
Text
        try {$this->db = & new goDB($this->settings['hostDB'], $this->settings['userDB'], $this->settings['passDB'], $this->settings['nameDB']);}
        catch (goDBExceptionConnect $e) {echo "Ошибка подключения"; exit();}
        $this->db->setDebug($this->settings['degug']);
        $this->db->setPrefix($this->settings['prefix']);
        $this->db->query("SET NAMES '{$this->settings['charset']}';");
 

кодировку задаю через SET NAMES
 
единственное запрос исправил
 
с "SELECT `id`, `parent`, `alias` FROM `site_content` WHERE `id` in (?a;);"
 
на "SELECT `id`, `parent`, `alias` FROM {site_content} WHERE `id` in (?a;);"
 
иначе префикс таблицы не подставляется имя таблицы надо брать в фигурные скобки в документации не встречал данного замечания мож не внимательно читал


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 13 Ноябрь, 2009, 01:55:01
alexxx,
Text
"SELECT `id`, `parent`, `alias` FROM ?t WHERE `id` in (?a;);", array('site_content', array(1,2,3))
то так тоже работать должен префикс


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 13 Ноябрь, 2009, 02:11:57
согласен так будет работать но мне надо было именно так
 
"SELECT `id`, `parent`, `alias` FROM {site_content} WHERE `id` in (?a;);"


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 16 Ноябрь, 2009, 01:16:06
понимаю что не в тему
но есть вопрос разбираюсь с исключениями как перехватить исключения типа E_PARSER
приведу пример
 
файл index.php
 
PHP
<?php
class MyException extends Exception {
   public function __construct($message, $errorLevel = 0, $errorFile = '', $errorLine = 0) {
      parent::__construct($message, $errorLevel);
      $this->file = $errorFile;
      $this->line = $errorLine;
   }
}
set_error_handler(create_function('$c, $m, $f, $l', 'throw new MyException($m, $c, $f, $l);'), E_ALL);
try
{
    include "echo.php";
}
catch (MyException $e) {echo $e->getCode();}
?>

файл echo.php
PHP

<?echo "name" echo"soname";?>
 

в файле echo специально пропускаем ;
 
при этом ошибка не перехватывается в чем проблема
и вообще возможно ли отловить такие ошибки


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 16 Ноябрь, 2009, 01:25:07
А зачем ловить такие ошибки, вместо того, чтоб их исправить?


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 16 Ноябрь, 2009, 02:22:30
нативный шаблонизатор
вот поэтому и ловить надо
если в шаблоне ошибка необходимо показывать свою страницу ошибок
а не стандартное сообщение Parse error:parse error,...


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 16 Ноябрь, 2009, 08:52:30
По-моему если файл подключать не require, а include, то глобально сценарий вываливаться не будет, будет только сообщение об ошибке в этом файле, которое можно разобрать. хотя не уверен.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 16 Ноябрь, 2009, 09:09:16
The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.
 
If errors occur before the script is executed (e.g. on file uploads) the custom error handler cannot be called since it is not registered at that time.

http://php.net/manual/en/function.set-error-handler.php
 
насколько я понимаю, то ошибки можно перехватить по своему если они произошли не в файле которые вызывает set_error_handler.
 
в остальных случаях нельзя что и понятно :)
 


Название: goDB — библиотека работы с MySQL
Отправлено: alexxx от 17 Ноябрь, 2009, 02:00:25
Думаю стоит продолжить тут http://pyha.ru/forum/topic/3393.30 как раз в тему будет


Название: goDB — библиотека работы с MySQL
Отправлено: CTAPbIu_MABP от 17 Ноябрь, 2009, 06:11:25
http://pyha.ru/forum/topic/3393.msg74700#msg74700


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Ноябрь, 2009, 01:08:55
Вот у меня такой запросец сейчас получился:
 
SQL
SELECT
    m.id AS id, title_eng AS title, short_description AS info,
        region_id, country_id, r.title AS region, c.title AS country, s.title AS stars, s.sorder,
        (SELECT file_name FROM `tt_tourism_hotels_gallery` WHERE hotel_id=m.id ORDER BY sorder LIMIT 0,1) AS pic
    FROM `tt_tourism_hotels` AS m
    LEFT JOIN `tt_tourism_regions` r ON region_id=r.id
    LEFT JOIN `tt_tourism_countries` c ON country_id=c.id
    LEFT JOIN `tt_tourism_hotels_stars` s ON stars=s.id
    WHERE 1=1
        AND country_id=1
        AND region_id=2
        AND s.id IN (SELECT id FROM `tt_tourism_hotels_stars` WHERE sorder>=(SELECT sorder FROM `tt_tourism_hotels_stars` WHERE id=2))
        AND m.id IN (
                SELECT hotel_id
                FROM tt_tourism_hotels_hotel2lodging
                    LEFT JOIN tt_tourism_hotels_lodging l ON lodging_id=l.id
                WHERE sorder > (
                    SELECT sorder
                    FROM tt_tourism_hotels_lodging AS ll
                    WHERE ll.id=5
                )
            )
и будет он только расти.
 
Что я думаю: что все время писать ?t и в конце там складировать названия таблиц как-то не совсем удобно. Какие будут предложения?


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 20 Ноябрь, 2009, 03:37:15
Абырвалг, я никогда не использую ?t


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Ноябрь, 2009, 04:19:48
если таблицы без префиксов, то в принципе ?t не сильно и нужен, разве что у нас есть какой-то класс (класс модуля?) в котором через константы объявлены названия таблиц.
 
PHP
<?
// ну, что б не писать
query('SELECT * FROM `' . ClassName::TABLE . '` WHERE a="b"');
// удобней
query('SELECT * FROM ?t WHERE a="b"', ClassName::TABLE);
 
// я пока склоняюсь к такому решению:
$this->db->bind(array('main' => self::TABLE, 'comm' => ModuleComments::TABLE));
 
$this->db->query('SELECT * FROM :main LEFT JOIN :comm c ON c.id=uid WHERE a=?i', $_GET['id']);
 
$this->db->unbind();
 


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 20 Ноябрь, 2009, 04:27:47
да может сделать тогда ?p и вставлять так:
SQL
SELECT * FROM ?p_users
что то типа того...
Спустя 31 секунду добавил
зы. 11111


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Ноябрь, 2009, 04:32:19
да, можно и ?p, но когда мы не знаем название таблицы, это не сильно поможет.
 
Еще не хватает возможности вставлять одни и те же данные несколько раз, как в sprintf (может об этом уже кто-то писал).


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 20 Ноябрь, 2009, 04:37:57
Абырвалг, да, sprintf для этого как раз подходит, тоже думал что будет красиво


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 20 Ноябрь, 2009, 08:46:14
А так префиксы работают?
PHP
$db->setPrefix('prefix_');
$db->query('SELECT * FROM {tablename}');
?


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 20 Ноябрь, 2009, 09:07:52
vasa_c, ты сам у себя спрашиваешь? оО


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Ноябрь, 2009, 09:35:04
я на самом деле не goDB пользуюсь, просто по такому же принципу все сделано.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 20 Ноябрь, 2009, 10:43:01
vasa_c, ты сам у себя спрашиваешь? оО
В моём goDB работают :), в том которое лежит здесь не факт.
 
я на самом деле не goDB пользуюсь, просто по такому же принципу все сделано.
В этом случае логично завести новую тему.


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 20 Февраль, 2010, 01:11:10
Всем доброй ночи.
 
Мне очень нравится Олег вообще и его goDB в частности, но у нее есть одна проблема: она работает только с MySQL.
Дабы решить эту проблему я решил написать свой вариант с блекджеком и шл... С поддержкой PostgreSQL.
Если честно я, разумеется, почти ничего не писал, а просто тупо скопипастил вариант vasa_c убрал оттуда mysqli и добавил вместо него функций а-ля pg_connect.
 
Это еще даже не альфа, а так рабочая сборка(во всяком случае на работе уже месяц вполне себе не падает).
Об полноценной альфе будет объявлено отдельно.
Документация пока в процессе(wiki формат тяжел для меня), поэтому укажу различия в API:
 
1. Нет плейсхолдера ?s т.к. PostgreSQL не умеет
SQL
INSERT INTO ... SET a='b'
2. Вариант разбора результата id отдает первый элемент первой строки результата. Для тех кто не в теме в PostgreSQL можно получить oid функциями, но никак не id последней вставки. Его можно получить выбрав из последовательности или заюзав RETURNING(что предпочтительнее). На это собственно я и рассчитывал.
 
В перспективе хочу сделать "единую" либу для обеих баз, т.к. иногда нужно по работе. Правда хз насколько это будет полезно общественности но результат обязательно выложу, если лень не заест.
 

Спасибо за внимание, буду рад любым замечаниям, особенно баг репортам :)
 



Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 20 Февраль, 2010, 01:23:50
UPD Скачать одним файлом.


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 20 Февраль, 2010, 10:49:56

В перспективе хочу сделать "единую" либу для обеих баз, т.к. иногда нужно по работе. Правда хз насколько это будет полезно общественности но результат обязательно выложу, если лень не заест.
Единую либу делать, мне кажется, смысла нет. Код усложняется,запутывается, а 100% заменяемости базы все равно добиться не удается. Лучше иметь отдельные либы под каждую базу.
 
А так, конечно, молодца, полезное дело. Хотя потестить не могу - не пользуюсь постгресом.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 20 Февраль, 2010, 11:43:45
Ещё не смотрел, но Даллон охуенен


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 20 Февраль, 2010, 11:48:19
Единую либу делать, мне кажется, смысла нет. Код усложняется,запутывается, а 100% заменяемости базы все равно добиться не удается. Лучше иметь отдельные либы под каждую базу.
Та не я не про ORM'ы всякие говорю: у нас на работе есть пара проектов в которых часть данных живет в MySQL а часть нужно таскать из PostgreSQL(согласен косяк, но так уж сложилось). Так вот хочется просто иметь единый какой-нибудь простенький фабричный метод, у которого можно получать объекты для постгреса или для мускула соответственно, но это потребует переименования классов, т.к. они сейчас по названиям "перекрываются" немного.
 
Впрочем я сейчас подумал и ты таки прав, такую узкозаточенную штуку не стоит на OS выкладывать.


Название: goDB — библиотека работы с MySQL
Отправлено: KENDO от 25 Февраль, 2010, 03:41:24
Может что пропустил, а куда pyha.ru/go/godb/ делось?


Название: goDB — библиотека работы с MySQL
Отправлено: md5 от 25 Февраль, 2010, 03:42:48

Может что пропустил, а куда pyha.ru/go/godb/ делось?
ололО!
адворд, рерайты?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 25 Февраль, 2010, 10:19:55
ставьте http перед цылкоми
Спустя 1 минуту 38 секунд добавил
Да, и, адво, рерайты!


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 25 Февраль, 2010, 11:11:42
адворерайты!


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 26 Февраль, 2010, 12:01:39

адворерайты!
адворайты!)


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 26 Февраль, 2010, 12:17:15
готово


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 12:00:46
ребят, а как безопасный LIKE припиздячить? чё-то не въеду ....


Название: goDB — библиотека работы с MySQL
Отправлено: SpartakuS от 04 Март, 2010, 12:20:22
kostyl, фильтруй базар % и _
Хз, может они экранируются. Почитай доки.


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 12:28:08

Хз, может они экранируются. Почитай доки.
Понятно, что экранируются. Я хочу, чтобы не я экранировал


Название: goDB — библиотека работы с MySQL
Отправлено: SpartakuS от 04 Март, 2010, 12:55:16
kostyl, экранирование - \%
То есть
Если в таблице есть запись 10%, 15% и тп И нам нужно выделить только проценты, то такой запрос делаем.
SQL
SELECT * FROM `table` WHERE `cost` LIKE '%\%'
Не знаю запустится или нет, но в данном случае мне нужно, чтобы 100% подошли, а 10рублей не подошли под патерн.


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 12:59:09
SpartakuS
да знаю я
как это делается в goDB ?
select * from table where name like  %?        или как?


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 01:12:53
что приходит в голову это сделать что то типа select * from table where name like  "%?l"
Спустя 49 секунд добавил
l - это маленькая L


Название: goDB — библиотека работы с MySQL
Отправлено: SpartakuS от 04 Март, 2010, 01:14:02
Блин, не заметил, что тема про гоудб. Думаю, что тебе васяц ответит. Ну или сам исходники посмотри.


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 01:38:56

Ну или сам исходники посмотри.
Смотрел я исходы. Фигня в том, что управляющие % и _ должны попадать в кавычки, так что как говорит мой начальник "не всё так просто" ;)


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 01:49:39
а еще было бы неплохо прилепить транзакции, lazy коннект и калбек интерфейс для работы с кешем результатов...


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 04 Март, 2010, 11:53:26
ребят, а как безопасный LIKE припиздячить?
Не помню, по-моему ничего для этого нет. Вручную, видимо, только.
 
транзакции
влом
 
lazy коннект
есть
 
калбек интерфейс для работы с кешем результатов
конкретнее


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 12:41:13

конкретнее
ну типа помечать запрос как запрос который кешируется в мемкеше и прозрачно работать с его результатами, что то типа того


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 04 Март, 2010, 12:42:46
kostyl, жесткая привязка goDB к мемкеш кешеру? оО имхо неправильный путь


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 04 Март, 2010, 12:49:25
ну типа помечать запрос как запрос который кешируется в мемкеше и прозрачно работать с его результатами, что то типа того
Это претит мне идеологически


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Март, 2010, 12:51:48
не жесткая просто какой-то интерфейс, а что там мемкешь или ничего, пофиг, что юзер захочет - если ничего нет, всё работает как раньше...


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 04 Март, 2010, 12:56:31

не жесткая просто какой-то интерфейс, а что там мемкешь или ничего, пофиг, что юзер захочет - если ничего нет, всё работает как раньше...
он обычно хочет дизайн красивые и кнопку "сделать пиздато" )


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 04 Март, 2010, 01:38:43
юзер в данном случае программист


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Март, 2010, 04:12:46
предлагаю допилять для ?с
PHP
if (is_array($el)) {
    return '`' . $this->_mqPrefix.$el[0] . '`.`' . $el[1] . '`' . (isset($el[2]) ? ' as `' . $el[2] . '`' : '');
}


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 21 Март, 2010, 01:53:39
это я типа фигню сморозил оО ?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 21 Март, 2010, 12:09:35
опиши словами


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 21 Март, 2010, 12:44:10
добавить алиасы для таблицы и для полей:
PHP
  /**
   * для твоего плейсходера ?t
   * @param array|string $el
   * @return string
   */

  private function _TableBindHelper($el)
  {
    if (is_array($el)) {
      return '`' . $this->_mqPrefix . $el[0] . '` as `' . $el[1] . '`';
    }
    return '`' . $this->_mqPrefix . $el . '`';
  }
  /**
   * для твоего плейсходера ?c
   * @param array|string $el
   * @return string
   */

  private function _FieldBindHelper($el)
  {
    if (is_array($el)) {
      return '`' . (isset($el[3]) ? $el[3] : $this->_mqPrefix . $el[0]) . '`.`' . //table name or alias
        $el[1] . '`' . //field name
        (isset($el[2]) ? ' as `' . $el[2] . '`' : ''); //field alias
    }
    return '`' . $el . '`';
  }


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 21 Март, 2010, 01:59:27
хз, может быть, хотя как-то запутано


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 21 Март, 2010, 02:34:01
vasa_c
если добавлять префикс и к псевдониму таблицы тогда наверно проще будет
Спустя 3 минуты 13 секунд добавил
хотя тогда не понятно будет при передаче параметров, задал ли ты псевдоним или реальное имя таблицы...


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 21 Март, 2010, 03:00:23
kostyl, я наоборот отказался от AS. Просто из кода не удаляю для BC. Мне удобнее алиас самому назначить а не передать в массиве:
 
PHP
$this->db->query('SELECT c, d, e FROM ?t', array('table1', 'alias1')); // на самом деле так не удобно
 
$this->db->query('SELECT c, d, e FROM ?t AS alias1', 'table1'); // так удобнее
 
$this->db->query('SELECT c, d, e FROM :table1 AS alias1'); // а так лучше всего. Но данные, содержащие ':' не должны вставляться в обход плейсхолдеров
/* но в моей либе все эти три случая работают */
 


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 21 Март, 2010, 03:44:49
Абырвалг
честно говоря, я еще не особо распробовал. Планирую что один хрен это всё будет собирать маппер или еще кто автоматом с помощью Query Object
Что то типа такого будет делать не я:
 
PHP
$Query = new Query(Query::SELECT);
$Query->AddField('user', 'login', 'id', 'u');
$Query->AddTable('user', 'u');
$Query->AddWhere('?f > ?i and ?f < ?i', array(array('user', 'id', '', 'u'), 0, 'id', '100'));
$Query->AddOrder(Query::DESC, 'user', 'login', '', 'u');
$Query->SetLimit(3);
 

SQL
SELECT `u`.`login` AS `id` FROM `prefix_user` AS `u` WHERE `u`.`id` > 0 AND `id` < 100 ORDER BY `u`.`login` DESC LIMIT 3 OFFSET 0

Короче надо пробовать ничего пока сказать не могу


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 01 Июнь, 2010, 08:55:06
goDB 1.1.3
 
Пара плейсхолдеров + один метод + один вопросик


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 01 Июнь, 2010, 09:59:20
О, новая версия!
Здорово. Постараюсь в ближайшем будущем портировать изменения в порт для постгреса.
 
По поводу @todo, на мой взгляд неплохая идея. Для длинных запросов самое то,
ну или если известно что поддерживать будет сторонний программист.
Короче даешь! :)
 
А вот от countRows слегка попахивает... Ну пока он один еще ничего, боюсь просто вдруг библиотека "замусорится"
такого рода функциями и потеряет легковестность?


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 01 Июнь, 2010, 10:11:27
я могу юзать goDB в комменрческих проектах?)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 01 Июнь, 2010, 10:17:15
можешь, но если что, я не виноват


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 01 Июнь, 2010, 10:25:02
я могу юзать goDB в комменрческих проектах?)
Лицензия: LGPL

GNU LGPL позволяет линковать с данной библиотекой или программой программы под любой лицензией, несовместимой с GNU GPL, при условии, что такая программа не является производной от объекта, распространяемого под (L)GPL, кроме как путём линкования.


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 09 Июнь, 2010, 11:59:42
почему экранируется символ &quot;


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 10 Июнь, 2010, 10:36:03
что? где?


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 10 Июнь, 2010, 02:20:10
при запросе, когда юзаю плейсхолдеры, после прохождения переменной через метод htmlspecialchars, кавычки всеравно экранируются)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 10 Июнь, 2010, 02:31:14
иллюстрирующий код


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 10 Июнь, 2010, 03:08:25
PHP
private function AddApp()
    {
        global $db;
 
        if (isset($_POST['company_name']))
        {
            $company_name = htmlspecialchars($_POST['company_name']);
 
            try
            {
                $db->query("insert into ?t (company_name) values (?)", Array('applications', $company_name));
                add_message("Заявка успешно добавлена.");
            }
            catch  (goDBException $e)
            {
                add_error("Не удалось добавить заявку.");
            }
        }
    }

в базу запишется текст следующего вида:
Text
ООО \&quotСтудия Дизайна\&quot


Название: goDB — библиотека работы с MySQL
Отправлено: Troy от 10 Июнь, 2010, 03:16:48
ммм так
PHP
$company_name = htmlspecialchars($_POST['company_name']);
же экранирует ? Оо


Название: goDB — библиотека работы с MySQL
Отправлено: mario от 10 Июнь, 2010, 03:22:57

ммм так
PHP
$company_name = htmlspecialchars($_POST['company_name']);
же экранирует ? Оо
+1


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 10 Июнь, 2010, 03:25:36
не понял


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 10 Июнь, 2010, 03:32:18
htmlspecialchars - она экранирует, а не goDB


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 10 Июнь, 2010, 03:39:05
что, и слеш подставляет?


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 10 Июнь, 2010, 03:56:08
а нахуя ты делаешь перед добавлением в БД htmlspecialchars?


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 10 Июнь, 2010, 03:58:53
Абырвалг, хороший вопрос)


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 10 Июнь, 2010, 04:02:51
я не знаю, выведи что есть $company_name до этого места:
PHP
$db->query("insert into ?t (company_name) values (?)", Array('applications', $company_name));


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 10 Июнь, 2010, 04:08:56
бля, у меня пхп не настроенный был) всем спасибо за участие


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 10 Июнь, 2010, 04:47:26
Так и знал )


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 10 Июнь, 2010, 04:49:18
мэджик квотес?


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 10 Июнь, 2010, 04:55:49
да


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 10 Июнь, 2010, 05:33:50
вуду пипл, меджик пипл


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 17 Июнь, 2010, 06:42:59
Наверное nobody cares, но все же:
Все изменения из 1.0.3 внесены в версию для PostgreSQL.
 
Документация тоже будет, но позже, т.к. для нее нужно лень не на 20 минут побороть, а часа на два.


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 17 Июнь, 2010, 06:43:38
кариес?)
Спустя 2 минуты 6 секунд добавил
dallone, ну что, 5 июня проебали... когда бухаем? Васяц сматался в Одессоньку до начала июля (значит в середине приедет может быть :)


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 17 Июнь, 2010, 06:45:59
adw0rd, да ладн тебе, уже опечататьсо нельзя :)
 

// Про себя: Надо было не выебыватся, а написать "всем похуй".

 
Надо в чате коллективно собраться и решить, когда забухать :)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 15 Сентябрь, 2010, 01:49:35
1.2.0
 
- Именованные плейсхолдеры
- Длинные синонимы коротких плейсхолдеров
- Ещё всякие мелочи
- Полностью обновлена докуменация
 
Подробности в прес-релизе


Название: goDB — библиотека работы с MySQL
Отправлено: artoodetoo от 15 Сентябрь, 2010, 02:00:41
вот это красиво! vasa_c, ты теперь не только умный, но и удобный )))


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 15 Сентябрь, 2010, 02:10:17
Ну чего, круто. Именованных плейсхолдеров очень не хватало, заебывало по сто раз одно и тоже перечислять.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 15 Сентябрь, 2010, 02:12:07
докуменация
Т


Название: goDB — библиотека работы с MySQL
Отправлено: md5 от 15 Сентябрь, 2010, 02:12:58
наконец-то
теперь хоть можно взять, да заюзать)
Спустя 14 секунд добавил

докуменация
Т
TT


Название: goDB — библиотека работы с MySQL
Отправлено: ivanscm от 15 Сентябрь, 2010, 11:42:42

1.2.0
 
- Именованные плейсхолдеры
- Длинные синонимы коротких плейсхолдеров
- Ещё всякие мелочи
- Полностью обновлена докуменация
 
Подробности в прес-релизе
круто. документация еще никому не мешала. уже в 2х проектах юзаю твою либу. спасибо!


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 19 Сентябрь, 2010, 08:27:10
TODO на новые версии - вносите правки, кому интересно.
 
Сделал сравнение с DbSimple.
Кто использовал обе, выскажите экспертную оценку, что там по делу, а чего я нагнал.


Название: goDB — библиотека работы с MySQL
Отправлено: Sinkler от 19 Сентябрь, 2010, 08:32:33
по dbsimple всё правильно, раньше активно её использовал
Спустя 57 секунд добавил
и, да, тоже всегда не понимал, нахуй эти макроподстановки нужны


Название: goDB — библиотека работы с MySQL
Отправлено: Troy от 19 Сентябрь, 2010, 08:48:24
TODO n1, ждем когда будет готово


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 12:49:57
Чё то я не понял что там в туду по транзакциям. Если их нету предлагаю вообщем стандартное (у меня так):
PHP
    public function startTransaction()
    {
        $this->_connect();
        $this->_connector->autocommit(false);
        $this->_activeTransaction = true;
    }
 
    public function commit()
    {
        $this->_connect();
        if ($this->_activeTransaction) {
            $this->_connector->commit();
            $this->_connector->autocommit(true);
            $this->_activeTransaction = false;
        }
    }
 
    public function rollback()
    {
        $this->_connect();
        if ($this->_activeTransaction) {
            $this->_connector->rollback();
            $this->_connector->autocommit(true);
            $this->_activeTransaction = false;
        }
    }
 
connector это объект mysqli


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 20 Сентябрь, 2010, 11:15:20
Нужны вложенные транзакции? Чтобы настоящий комит был только когда он вызван для всех вложенных?


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 20 Сентябрь, 2010, 01:55:23
Я уже писал, что мы давно сделали класс, расширяющий возможности godb для работы с "запросами изменяющими данные в базе". Даже вроде аттачил, но мне не жалко еще раз. (Скачав уберите расширение .gif)
Может кому пригодится, там есть транзакции.
С последней версией не тестил, но по идее должно работать.
 


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 02:21:38
vasa_c, что значит вложенные?
AlexB, думаю довольно замудрено, чем проще тем лучше... честно говоря не особо вдуплил в чём смысл, разве что "побезопаснее" моего предложения..


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 20 Сентябрь, 2010, 02:51:52
Это значит в какой-то функции используется транзакция:
PHP

function ff() {
    $db->begin();
    $db->query(...);
    $db->query(...);
    $db->commit();
}
 

А потом в другом месте в рамках другой транзакции вызывается эта функция.
PHP

$db->begin();
$db->query(...);
ff();
$db->query(...);
$db->commit();
 

Первый коммит будет вызван в ff(), но фактического коммита при этом не произойдёт.


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 20 Сентябрь, 2010, 03:10:08
kostyl, да че там мудреного?
PHP

try
{
    $GoDb->Transaction(); // Стартанули транзакцию
 
    $GoDb->Delete( ...
    или/и
    $GoDb->SmartInsert( ...
    или/и
    $GoDb->Insert( ...
    или/и
    $GoDb->Update( ...
   
    $GoDb->Transaction(); // Закомитили
   
}
catch (DBExceptionRollbackTrigger $et)
{
    $GoDb->Transaction(); // Произошла херня, откатились
    // Здесь, при желании, можно прокинуть Exception дальше, если есть их обработка для GoDb
}
 


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 03:06:34
AlexB, ИМХО не стандартный подход ;)
vasa_c а от куда ff(); узнает надо ей коммитить или нет? ;)


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Сентябрь, 2010, 03:09:05
kostyl, $db узнает а не ff()


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 03:12:45
vasa_c, Абырвалг  я так понял это надо для всяких возможностей, но прикол в том, что управление транзакциями - это свойство приложения, проявляющееся в ACID и ты его никак не скроешь....
 
или я чего то не пойму??
Абырвалг
< $db узнает а не ff()
как?


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 20 Сентябрь, 2010, 03:15:30

AlexB, ИМХО не стандартный подход ;)
Чего же в нем не стандартного? Роллбэк это в любом случае форс-мажор, поэтому ИМХО совершенно логично сделать его эксепшеном.
Не забываем, что в роллбэке могут быть и другие действия, кроме непосредственно работы с базой, например, удаление лишних файлов. И очень здорово, когда весь "аварийный" код сосредоточен в отдельном месте.


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 03:16:07
vasa_c, а, я понял, ну можно и так сделать, если только ты всегда коммитишь...
Спустя 1 минуту 20 секунд добавил
$GoDb->Transaction()
я имею в виду интерфейс, одна и та же функция обладает двумя поведениями..


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Сентябрь, 2010, 03:16:51
kostyl, в объекте ДБ есть счетчик открытых транзакций


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 03:21:10
kostyl, в объекте ДБ есть счетчик открытых транзакций
это ты к чему? по поводу предложения Олега я уже понял ))


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Сентябрь, 2010, 03:25:15
ну тебе было что-то непонятно про вложенные транзакции


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 03:27:09
Абырвалг, ну я не знаю как там в mysqli с вложенными транзакиями или как там, забей я тогда не про то подумал..


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 20 Сентябрь, 2010, 03:33:40

я имею в виду интерфейс, одна и та же функция обладает двумя поведениями..
Да это частность (иногда бывает удобно). Если посмотришь код, то увидишь что она вызывает две разные функции. Можно вызывать их на прямую, если кому-то так понятнее - не суть.


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 20 Сентябрь, 2010, 03:48:02
Да это частность (иногда бывает удобно)
Я чаще всего юзал только такой интерфейс, да даже не чаще, а в принципе другой и не юзал ))
try {
$t->start();
/* any code */
$t->commit();
} catch (Exception $e) {
$t->rollback();
}


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 20 Сентябрь, 2010, 05:33:13
В DbSimple входные данные (те, которые должны заменить плейсхолдеры), передаются отдельными аргументами метода
В goDB одним аргументом в виде массива
кстати, я в свое время и написал свою либу, так как мне удобнее передавать много аргументов (sprintf-style) и использовать разные методы (fetchAll, while($row = $db->fetch()), fetchCell, fetchScalar(), ...) для разбора результатов


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 22 Сентябрь, 2010, 10:10:40
Привел порт PostgreSQL в соответствие с версией 1.2.0.
 
vasa_c пара вопросов:
 
1. Я не понял, то что линк и charset можно передать только в массиве это не баг это фича?
2. Почему есть 'li', 'ai', 'ia' но нет 'il'?
 
И да, даешь транзакции в массы! А то не хочется самомоу запиливать, а потом приводить их в соответствие с godb 1.2.x :)
 


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 22 Сентябрь, 2010, 10:46:13
далон охуен!
 
1. да, а как ещё? порядковым аргументом в конструкторе - там уже места нет, тем более он должен соответствовать конструктору mysqli.
2. ai, ia, ni, in, наделал кучу мусора, теперь решил лишнее выкинуть, к одному привести, поэтому только "li" :)


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 22 Сентябрь, 2010, 11:29:41
Понял, согласен логичнее будет использовать какой-то один вариант.
Я, кстати, не понял из обсуждения тут, на какой версии транзакций решено остановится, с вложенными или без?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 22 Сентябрь, 2010, 11:35:45
я сам не понял.
как ты сейчас скажешь, так и будет :)


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 22 Сентябрь, 2010, 12:28:15
Ну мне лично нужны вложенные :)


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 22 Сентябрь, 2010, 01:50:45
Ну мне лично нужны вложенные :)
только если пользователь не знает о такой возможности, то это должно быть прозрачно для него...


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 22 Сентябрь, 2010, 03:39:20
только если пользователь не знает о такой возможности, то это должно быть прозрачно для него...
Ну это то само собой.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 27 Сентябрь, 2010, 12:30:24
1.2.1: юнит-тесты.


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 27 Сентябрь, 2010, 12:45:51
тесты - это круто


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Сентябрь, 2010, 03:04:22
goDB 1.2.2: ?bool, kassoc и ещё немножко


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 03:29:37
vasa_c, немного внесу изменений в твоё сравнение с DBSimple
PHP
$pattern = 'INSERT INTO ...';         
$db->query($pattern, $value1, $value2, ...);
 
В goDB одним аргументом в виде массива:
$pattern = 'INSERT INTO ...';         
$data    = array($value1, $value2, ...);
$db->query($pattern, $data);
            
В DBsimple можно абсолютно также можно постить массивами.
PHP
                $core->database->select("
                    UPDATE ?_docs_items
                    SET ?a"
,$array);


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Сентябрь, 2010, 03:31:09
не, не совсем то, здесь массив вставляющийся вместо одного плейсхолдера, а у меня все данные для всех плейсхолдеров в виде одного массива.


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 03:35:01
Отсутствие макроподстановки для меня критично, привык уже как в Smarty
Спустя 1 минуту 55 секунд добавил
Кеширование, момент упустил тоже.
Спустя 1 минуту 3 секунды добавил
Вопросы связанные с prepare ... execute  
Спустя 32 секунды добавил
Логирование запросов


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Сентябрь, 2010, 03:36:16
Отсутствие макроподстановки для меня критично, привык уже как в Smarty
Ну значит, DbSimple тебе больше подходит )
Если не сложно - объясни всю соль, у Котерова малопонятные примеры.
 
Кеширование, момент упустил тоже.
Про кэширование сказал, что имхо, это задача не того слоя.
Спустя 34 секунды добавил
Писал я там и про prepare и про логи )


Название: goDB — библиотека работы с MySQL
Отправлено: Sinkler от 28 Сентябрь, 2010, 03:37:32
Про кэширование сказал, что имхо, это задача не того слоя.
+1


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 03:41:57
Ну например, я сейчас мало представляю как я буду переписывать свою мини-cms с мульти-языковой выборкой из таблиц, без макросов, можно обойтись и без них, но эт как напильником валить деревья, Не читаемые конструкции php + sql... фиии мерзость как представлю....
Пример удобности макроподстановки поиск и выборка из базы с 50 критериями у которых есть дополнительные критерии в зависимости от входящего значения критерия.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Сентябрь, 2010, 03:43:13
ну примеры, примеры давай )


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 03:51:30
Начну с простого запроса (кстати одна из возможностей DBSimple формирования древовидного результата, для подобной типовой операции):
 
PHP
        $tree = $core->database->select("
          SELECT
            *,
            id AS ARRAY_KEY,
            parent AS PARENT_KEY
            FROM ?_table
            { WHERE lang = ? }
            ORDER BY `position`
        "
, (empty(CURRENT_LANG)? $config["site"]["locale"] : CURRENT_LANG));
Спустя 1 минуту добавил
вместо $config["site"]["locale"] можно указать SKIP, который просто проигнорирует первую подстановку
Спустя 3 минуты 6 секунд добавил
Усложним запрос:
PHP
$tree = $core->database->select("
          SELECT
            *,
            id AS ARRAY_KEY,
            parent AS PARENT_KEY
            FROM ?_table
            {
               WHERE `lang` = ? { AND `tag` = ? }
            }
            ORDER BY `position`
        "
,
(empty(CURRENT_LANG)? $config["site"]["locale"] : CURRENT_LANG),
(empty(TAG_VAR)? DBSIMPLE_SKIP : TAG_VAR)
);
Спустя 1 минуту 4 секунды добавил
Вложенность таких критериев можно быть бесконечной, без макроподстановки это был бы пиздец.
Формировать каждый запрос с помощью условий, это был бы пиздец.


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 03:59:03
Ну вот одно нарекание у меня на DBSimple пока - SelectPage - разраб походу не тестировал с данными свыше 150к.
P.S. извини, что подымаю его возможности в твоей теме, ну люблю я либу эту
Спустя 1 минуту 31 секунду добавил
Имелось ввиду для тех кто в танке SelectPage как уверяет автор либы уверяет что отлично применять для постраничной навигации (наверно для данных до 1000)


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 04:07:58
Использовать SQL_CALC_FOUND_ROW это пиздец.
Спустя 16 секунд добавил
Это в догонку к SelectPage


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Сентябрь, 2010, 04:27:43
"SQL_CALC_FOUND_ROW" чем именно плох?


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 28 Сентябрь, 2010, 04:30:45

"SQL_CALC_FOUND_ROW" чем именно плох?
не так давно на эту тему был замечательный срач. pydude там тоже был замечен


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 04:32:04
adw0rd, а ты попробуй сделай выборку данных эдак так 150к :))))))))) а потом сравни тоже самое с 2-умя запросами один из которых COUNT(*).


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 28 Сентябрь, 2010, 04:32:37
да, там в той теме тот же пиздюк, который пеарил свою цмс про жирафов в phar-архиве


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 04:34:49
Абырвалг, ыыыыыыыыы поверхностно пробежался по ссылке абрвалг, дуд там всё верно сказал.
У меня эт в первый раз примерно так:
"а чё чё я? я сам охуел!"


Название: goDB — библиотека работы с MySQL
Отправлено: CTAPbIu_MABP от 28 Сентябрь, 2010, 05:15:56

Это значит в какой-то функции используется транзакция:
PHP

function ff() {
    $db->begin();
    $db->query(...);
    $db->query(...);
    $db->commit();
}
 

А потом в другом месте в рамках другой транзакции вызывается эта функция.
PHP

$db->begin();
$db->query(...);
ff();
$db->query(...);
$db->commit();
 

Первый коммит будет вызван в ff(), но фактического коммита при этом не произойдёт.

Text

$db->begin() = function (){ $this->openTr++}
 
$db->commit() = function (){ if $this->openTr > 1 then $this->openTr-- else $this->realCommit()}
 

так чтоли?


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Сентябрь, 2010, 05:35:14
adw0rd, а ты попробуй сделай выборку данных эдак так 150к :))))))))) а потом сравни тоже самое с 2-умя запросами один из которых COUNT(*).
справедливо для myisam ) иннодб сука помедленнее будет все равно на глаз)


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Сентябрь, 2010, 06:06:02
Если честно, я юзаю для кинсбурга SQL_CALC_FOUND_ROWS и у меня там таблицы innodb в основном, так вот работает быстрее чем COUNT(1)
Спустя 59 секунд добавил
Я только на основе практики говорю, мне пофиг как он там сфееричски работает плохо, в реальности он мне больше походит
Спустя 42 секунды добавил
и у меня там таблицы не больше 30 000 записей
Спустя 1 минуту 12 секунд добавил
А что касается пагинации в DBSimple или как-то так, то если оно и нужно там (я не думаю на самом деле что такая ф-ость должна там присутствовать), то должен быть выбор юзать SQL_CALC или COUNT


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Сентябрь, 2010, 06:09:16
adw0rd, ну ты молодец!!!!


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 28 Сентябрь, 2010, 06:24:10
да иди ты)


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Сентябрь, 2010, 06:34:10
та я правда рад!


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 07:41:34
phpdude,  ыыыыыыыыыыыыыыыыыыыыыыыы


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Сентябрь, 2010, 07:51:05
pissflaps,
Вложенность таких критериев можно быть бесконечной, без макроподстановки это был бы пиздец.
Формировать каждый запрос с помощью условий, это был бы пиздец.
Смотря насколько часто такое надо.
У меня такое происходит не настолько часто, чтобы вносить это в функционал либы для базы.
Лучше формирование хитрожопых запросов на основании кучи фильтров вынести отдельно.
 
Хотя это моё имхо, и мне тоже говорят, что я набил туда лишнего.
Спустя 21 секунду добавил
возможно и сделаю
Спустя 16 секунд добавил
CTAPbIu_MABP, да, примерно, так


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 08:42:16
vasa_c,
Ну я тебе не в упрёк, тебе и так уважуха за либу, я просто как нейтральный человек говорю так сказать мысли в слух.
А если так рассуждать, то зачем либы, если в проекте не всё так часто меняется, извратиться и сделать под конкретную задачу кучу условий. :D


Название: goDB — библиотека работы с MySQL
Отправлено: Sinkler от 28 Сентябрь, 2010, 09:42:46
ммм, тут уже 17ая страница)))


Название: goDB — библиотека работы с MySQL
Отправлено: pissflaps от 28 Сентябрь, 2010, 10:10:06
даёшь 18!


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 28 Сентябрь, 2010, 10:28:36
да хоть 25, всё равно вырежу )


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 28 Сентябрь, 2010, 10:34:10
на 17ой обычно у нас банят .... :D


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 29 Сентябрь, 2010, 12:59:53
Васяц, сделай макроподстановки. ИМХО полезная вещь.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 29 Сентябрь, 2010, 09:59:40
AlexB, как у котерова?


Название: goDB — библиотека работы с MySQL
Отправлено: KaFe от 29 Сентябрь, 2010, 10:53:52
vasa_c, лицензия у библа какая, что я могу с ней делать в плане использования и распространения???


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 29 Сентябрь, 2010, 10:57:42
LGPL


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 29 Сентябрь, 2010, 12:41:02

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


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 29 Сентябрь, 2010, 12:31:19
Ну, раз почётный пользователь просит, то сделаем )


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 29 Сентябрь, 2010, 12:37:05
AlexB, так используй Doctrine 2, там все это есть
PHP

$qb->select(array('u')) // string 'u' is converted to array internally
   ->from('User', 'u')
   ->where($qb->expr()->orx(
       $qb->expr()->eq('u.id', '?1'),
       $qb->expr()->like('u.nickname', '?2')
   ))
   ->orderBy('u.surname', 'ASC'));
 
 


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 29 Сентябрь, 2010, 12:38:39
Новый батл - Абырвалг переписывает спорт-экспресс на доктрине, а Адворд на питоне.


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 29 Сентябрь, 2010, 12:41:26

Ну, раз почётный пользователь просит, то сделаем )
Спасибо, брат ... )))


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 29 Сентябрь, 2010, 12:41:30

Новый батл - Абырвалг переписывает спорт-экспресс на доктрине, а Адворд на питоне.
+1
 
Абырвалг, пиздец гавнокодище ...


Название: goDB — библиотека работы с MySQL
Отправлено: Givi от 29 Сентябрь, 2010, 12:56:14
phpdude, ну как по мне, то не говнокод, а просто дохуязавернутая хрень.
По сути красиво, но нихуя не информативно + при этом никаких преимуществ перед нативом + плейсхолдерами я не вижу.
Сейчас вот смотрю на старенькие файлы и четко вижу SQL-запросы, сразу понятно что где как. А такая пурга, как у Главрыбы делает весь код однообразным и... и даже не очень поворотливым, ибо шансов что-то проебать только возрастает.


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 29 Сентябрь, 2010, 04:10:16
Givi, чру это не я!


Название: goDB — библиотека работы с MySQL
Отправлено: Givi от 29 Сентябрь, 2010, 04:46:15
phpdude, =)))


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 02 Октябрь, 2010, 10:07:31
Транзакции ещё не внедрил, но доку уже написал. :)
 
Читайте и корректируйте, чтобы потом не высказывали ничего )


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 03 Октябрь, 2010, 12:43:01
А заодно и мультизапросы.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 04 Октябрь, 2010, 11:21:13
Раз пошла такая пьянка: подготовленные выражения.


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Октябрь, 2010, 03:17:40
Закрытие подготовленного выражение когда оно более не нужно Кеширование
странно, а ты можешь юзать stmt после того когда у же другой запрос выполнил?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 04 Октябрь, 2010, 03:31:54
не понял


Название: goDB — библиотека работы с MySQL
Отправлено: artoodetoo от 04 Октябрь, 2010, 03:35:50
это видимо про сложности с unbuffered query


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 04 Октябрь, 2010, 03:38:11
ааа, это я не понял сначала ))


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 11 Октябрь, 2010, 01:25:06
goDB 1.3.0:
 
- Транзакции
- Мультизапросы
- Подготовленные выражения
- Объекты-ссылки
- И много мелочей.
 
Подробности в пресс-релизе.
 
Пролетарии всех стран выбирают goDB.
 
Качать (zip, 31 K)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 11 Октябрь, 2010, 06:41:33
Кто на мой RSS подписан? Кому с blgo пришла статья?


Название: goDB — библиотека работы с MySQL
Отправлено: mario от 11 Октябрь, 2010, 06:53:32

Кто на мой RSS подписан? Кому с blgo пришла статья?
последняя запись:
goDB 1.2.2
от Блог ГО автор: vasa_c
 
Ничто не заставляет делать какое-то дело, как необходимость делать другие более важные дела.
Поэтому goDB продолжает радовать нас новыми версиями.
 
В новой версии (1.2.2):
 
Плейсхолдер ?bool: вставка значения для столбца типа BOOL.
 
Формат представления результата kassoc и его подвид kassoc:$col.
 
Формат же vars теперь позволяет выборку по одному столбцу: его значение станет как ключём массива, так и его элементом.
 
Плюс добавлены исключения goDBExceptionFetchUnknown и goDBExceptionFetchUnexpected.
Также местами переписан код.
 
Сам класс теперь можно просмотреть прямо на сайте не скачивая архивов.
 
Ну и конечно, можно всё-таки скачать архив (ZIP, 5K)
Спустя 47 секунд добавил
гугль ридер использую.
URL фида: http://feeds.feedburner.com/blgo


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 11 Октябрь, 2010, 06:58:25
билять, RSS слажал.
mario, спасибо


Название: goDB — библиотека работы с MySQL
Отправлено: mario от 11 Октябрь, 2010, 06:59:47
mario, спасибо
да незачто )


Название: goDB — библиотека работы с MySQL
Отправлено: dallone от 14 Октябрь, 2010, 09:51:19
vasa_c вновь охуенен. Постараюсь накатить в ближайшее время все изменения.
Заодно unit тесты приведу в соответствие с твоими, у тебя они куда грамотнее реализованы.
 
Кстати, насколько  я помню в 2.0 ты планировал Firebird и PostgreSQL поддержку включить напрямую в БД, мне это не приснилось?
С удовольствием помогу, если нужно(ну там по асе поболтать с заинтересованным видом, табуляцию в файлах поправить...).


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 14 Октябрь, 2010, 07:48:23
vasa_c никогда не будет настолько охуенен, насколько охуенен dallone.
 
да, в 2.0 точно будет поддержка адаптеров для различных баз.
а вот то, что сама 2.0 таки будет, это совершенно не точно.
 
С удовольствием помогу, если нужно(ну там по асе поболтать с заинтересованным видом, табуляцию в файлах поправить...).
Не, постгрю сам будешь реализовывать :)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 09 Январь, 2011, 11:14:25
go\DB 2.0.0 - beta


Название: goDB — библиотека работы с MySQL
Отправлено: truth4oll от 10 Январь, 2011, 12:36:55
xxx: Дааа, наша Катя с запросами...
yyy: SELECT * ?
ххх: нее, у неё посложнее запросы


Название: goDB — библиотека работы с MySQL
Отправлено: PaNick от 18 Январь, 2011, 09:42:51
Несколько часов убил на выбор, что использовать. Разбираюсь пока в этом плохо. Но нашел, чего мне не хватает, хотя реализуется довольно быстро.
В PDO есть довольно полезная функция fetchAll() - выгружает весь результат в массив. было бы хорошо сделать ее и здесь. Так как в MySqli я не нашел.


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 18 Январь, 2011, 09:51:07
в mysqli это есть, но начиная с 5.3


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 18 Январь, 2011, 09:56:02

В PDO есть довольно полезная функция fetchAll() - выгружает весь результат в массив. было бы хорошо сделать ее и здесь.
Дык в GoDB все есть ...


Название: goDB — библиотека работы с MySQL
Отправлено: krasun от 19 Январь, 2011, 12:48:32
http://code.google.com/p/go-db/wiki/fetch
 
прямо перед заголовком "Дополнительные параметры формата", есть код
 
PHP

result = $db->query($pattern, $data);
$email = $result->el();
 

думаю, тут ошибка, наверное $result, а не result


Название: goDB — библиотека работы с MySQL
Отправлено: adw0rd от 19 Январь, 2011, 01:13:54
эх питон, питон )


Название: goDB — библиотека работы с MySQL
Отправлено: fgets от 19 Январь, 2011, 01:29:38
charset Указывает кодировку. Не нужно делать вручную SET NAMES

его и так делать не нужно


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 19 Январь, 2011, 11:58:17
думаю, тут ошибка, наверное $result, а не result
да, спасибо
 
его и так делать не нужно
спасибо за отзыв, если бы вы сделали бы его более развёрнутым, было бы лучше.


Название: goDB — библиотека работы с MySQL
Отправлено: fgets от 19 Январь, 2011, 01:06:45

думаю, тут ошибка, наверное $result, а не result
да, спасибо
 
его и так делать не нужно
спасибо за отзыв, если бы вы сделали бы его более развёрнутым, было бы лучше.

bool mysql_set_charset (string $charset [, resource $link_identifier])
 
mysql_set_charset() функция устанавливает кодировку по умолчанию для текущего соединения.
 
Замечание: Функция работает с MySQL 5.0.7 или выше версиями
Это предпочтительный способ сменить кодировку.
Использование mysql_query() чтобы выполнить SET NAMES... не рекомендуется.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 19 Январь, 2011, 01:29:04
fgets, mysql_set_charset тоже не рекомендуется, рекомендуется mysqli :)
только смысл не меняется, чтобы вызвать эту функцию, всё равно подключиться нужно сначала.


Название: goDB — библиотека работы с MySQL
Отправлено: fgets от 19 Январь, 2011, 02:25:40

fgets, mysql_set_charset тоже не рекомендуется, рекомендуется mysqli :)
только смысл не меняется, чтобы вызвать эту функцию, всё равно подключиться нужно сначала.

http://php.net/manual/en/mysqli.set-charset.php
 
Note: This is the preferred way to change the charset. Using mysqli::query() to execute SET NAMES .. is not recommended.
 
имелось ввиду что тут на уровне пхп это делается, т.е. быстрее и проще чем SET NAMES, и да подключиться нужно


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 31 Январь, 2011, 10:58:06
1.3.2.. Пофикшен баг с итераторами.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 03 Апрель, 2011, 01:22:49
goDB 2.0: адаптер для постгри от dallone.


Название: goDB — библиотека работы с MySQL
Отправлено: nworm от 13 Апрель, 2011, 12:34:49
Подскажите, пожалуйста.
 
На сервере MySQL есть хранимые процедуры, возвращающие несколько резалтсетов. Обратиться с помощью mysqli_multi_query к ним получается, но с помощью goDB не получилось.
 
Запрос вроде такого возвращает ошибку:
PHP

$queries = array (
    'call `h_giEngInfo`(?i)'
);
$datas = array (array (1));
 
$results = $db->multiQuery($queries, $datas, 'assoc');

Можно ли вообще в goDB получать от хранимой процедуры несколько результирующих наборов?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 13 Апрель, 2011, 12:52:58
Можно попробовать обратиться напрямую к mysqli-методу: $db->multi_query()


Название: goDB — библиотека работы с MySQL
Отправлено: nworm от 13 Апрель, 2011, 01:36:20
Да. Через $db->multi_query() работает. Только разбор результата не удобный - такой же как в родном mysqli. Придётся дописывать отдельно...


Название: goDB — библиотека работы с MySQL
Отправлено: nworm от 13 Апрель, 2011, 01:48:29
А нельзя ли добавить возможность возвращения методом $db->multi_query нормальный разбор результата по аналогии с возвращаемым методом multiQuery? Или чтобы multiQuery возвращал несколько значений, генерируемых хранимой процедурой?


Название: goDB — библиотека работы с MySQL
Отправлено: Givi от 13 Апрель, 2011, 02:02:54
Думаю это добавится только после того, как Вася_Ц сам заимеет необходимость в такой фишке.


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 13 Апрель, 2011, 03:44:38
А нельзя ли добавить возможность возвращения методом $db->multi_query нормальный разбор результата по аналогии с возвращаемым методом multiQuery?
Можно попробовать через ->fetch() пропустить, но не уверен.
 
Думаю это добавится только после того, как Вася_Ц сам заимеет необходимость в такой фишке.
Ну если написать заяву с конкретным описанием проблемы, то может и попробую что-нибудь сделать )


Название: goDB — библиотека работы с MySQL
Отправлено: nworm от 14 Апрель, 2011, 01:20:55
Ок. Тогда описание проблемы:
 
Хранимые процедуры в MySQL позволяют использовать для получения результата оператор SELECT. Если в процедуре несколько SELECT'ов, то сгенерируют множественный набор результатов (multiple result set).
 
Выполняем запрос "CALL `h_giEngine(1)`". Функция h_giEngine(id) возвращает 5 наборов значений.
 
В goDB на данный момент
 
$db->query отрабатывает запрос, но возвращает только первый параметр. Без free_result дальнейшие запросы делать нельзя.
 
$db->multiQuery не отрабатывает вообще. Сваливается в godb.php на строке 1200 с сообщением 'multi results > queires'. Я так понимаю это сделано для защиты от ситуации, когда у нас разное количество запросов в базу и ответных возвращаемых наборов.
 
$db->multi_query отрабатывает правильно. Однако, в этом случае результирующие наборы неудобно обрабатывать. Приходится использовать такую конструкцию:
PHP

if ($db->multi_query($query))
{
        $r = array ();
    do
    {
            if ($result = $db->store_result())
        {
            while ($row = $result->fetch_assoc())
            {
                $r[$i][] = $row;
            }
            $result->free_result();
            }
       
            if ($db->more_results())
        {
                    $i++;
            }
    } while ($db->next_result());
};

В массиве $r ассоциативный двумерный массив, подобный тому, который возвращает метод $db->multiQuery. С таким массивом потом можно относительно удобно работать.

Таким образом можно доработать метод multiQuery, чтобы он мог возвращать несколько наборов значений (в виде соответствующего массива в зависимости от значения параметра $fetches) тогда, когда производится вызов процедуры.


Название: goDB — библиотека работы с MySQL
Отправлено: Flare от 21 Апрель, 2011, 06:25:57
я так понял это что-то похожее на Doctrine DBAL? Надо будет посмотреть.


Название: goDB — библиотека работы с MySQL
Отправлено: mario от 21 Апрель, 2011, 06:27:57
да, только лучше )))


Название: goDB — библиотека работы с MySQL
Отправлено: Givi от 21 Апрель, 2011, 06:56:39
не видел Доктрину, но библа Олега очень удобная. Хотя. пока я использую всего 10-15% её возможностей, но и это сокращает мне говнокод в 3-5 раз.


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 21 Апрель, 2011, 07:02:30

да, только лучше )))
чем?


Название: goDB — библиотека работы с MySQL
Отправлено: mario от 21 Апрель, 2011, 07:04:46
простотой ;)
PS спокуха бро! Я не агрить пришел )


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 21 Апрель, 2011, 08:29:09
я тоже не троллить и не спорить пришел. Просто интересно


Название: goDB — библиотека работы с MySQL
Отправлено: mario от 21 Апрель, 2011, 10:59:01

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


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 24 Сентябрь, 2011, 11:20:54
на гитхабе


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 24 Сентябрь, 2011, 11:23:39
спустя 156 дней 21 минуту 53 секунды
некропостер блеядь!


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 24 Сентябрь, 2011, 11:26:19
спустя 2 минуты 45 секунд
Дудопостер, блеадь!


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 24 Сентябрь, 2011, 11:33:55
что вынудило уйти с гуглокода?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 24 Сентябрь, 2011, 11:39:44
Я не уходил пока с гуглокода.
Я старую версию перенёс с пыхохаба.


Название: goDB — библиотека работы с MySQL
Отправлено: Givi от 25 Сентябрь, 2011, 05:28:00
vasa_c, линк на документацию не фурычит (https://github.com/vasa-c/godb-old/blob/master/README.md)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 25 Сентябрь, 2011, 06:24:37
Givi, спасибо :)


Название: goDB — библиотека работы с MySQL
Отправлено: Alexmorbo от 18 Январь, 2012, 11:35:37
Хорошая либа, только не понял как работать с функциями типа NOW(), если нужно их вставить в INSERT
Сейчас вставляю ее как ?q, чтобы она не экранировалась


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 18 Январь, 2012, 12:15:46
не совсем понял вопрос. можно предметный код?


Название: goDB — библиотека работы с MySQL
Отправлено: Alexmorbo от 18 Январь, 2012, 12:42:28
update {users} SET last_act = NOW() WHERE id = "1"
 
чтото типа такого, last_act = DATETIME


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 18 Январь, 2012, 12:44:42
ну видимо NOW() это текущее время и дата, кэп


Название: goDB — библиотека работы с MySQL
Отправлено: Alexmorbo от 18 Январь, 2012, 12:49:00
это да, только после выполнения query();
если я передаю NOW() параметром, то оно обертывается в кавычки, тогда оно не срабатывает и принимается как строка
Спустя 3 минуты 22 секунды добавил
Например у УИ это делается так
PHP
new CDbExpression('NOW()')
У Зенда вроде так
PHP
$date = Zend_Date::now();


Название: goDB — библиотека работы с MySQL
Отправлено: Frozzeg от 18 Январь, 2012, 01:05:05
placeholder спасет отца русской демократии?


Название: goDB — библиотека работы с MySQL
Отправлено: Alexmorbo от 18 Январь, 2012, 01:12:51
я этого и хочу добиться :)
вот живой скрипт
 
PHP
$userID = mrb::$db->query('INSERT INTO {users} (?cols) VALUES (?, ?, ?, ?, ?, NOW(), ?, ?, ?, ?)', $data, 'id');

Вот NOW() так и использовать или через плейсхолдер запихать реально?


Название: goDB — библиотека работы с MySQL
Отправлено: Status от 18 Январь, 2012, 01:14:38

я этого и хочу добиться :)
вот живой скрипт
 
PHP
$userID = mrb::$db->query('INSERT INTO {users} (?cols) VALUES (?, ?, ?, ?, ?, NOW(), ?, ?, ?, ?)', $data, 'id');

Вот NOW() так и использовать или через плейсхолдер запихать реально?
 
А на хуя спрашивается?:D Только что б красиво было, или боитесь что база сама себе инъекцию сделает?D


Название: goDB — библиотека работы с MySQL
Отправлено: Givi от 18 Январь, 2012, 01:26:36
=))) База-суицидистка.


Название: goDB — библиотека работы с MySQL
Отправлено: Alexmorbo от 18 Январь, 2012, 01:40:47


я этого и хочу добиться :)
вот живой скрипт
 
PHP
$userID = mrb::$db->query('INSERT INTO {users} (?cols) VALUES (?, ?, ?, ?, ?, NOW(), ?, ?, ?, ?)', $data, 'id');

Вот NOW() так и использовать или через плейсхолдер запихать реально?
 
А на хуя спрашивается?:D Только что б красиво было, или боитесь что база сама себе инъекцию сделает?D
 
Чтобы красиво было (: ну и база суицидница, да (:


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 18 Январь, 2012, 03:52:25
ну просто NOW() вставить в запрос, как обычно.
другое дело, что через список, типа ?l, конечно, такое не выйдет.


Название: goDB — библиотека работы с MySQL
Отправлено: master от 18 Январь, 2012, 05:44:39
Alexmorbo, это проблема многих библиотек для БД. используй NULL вместо NOW().
Впрочем, я бы рекомендовал вставлять ни то ни другое, а текущее время в UTC (формировать в скрипте, а не в запросе)


Название: goDB — библиотека работы с MySQL
Отправлено: Абырвалг от 18 Январь, 2012, 09:29:06
формировать в скрипте, а не в запросе
+1


Название: goDB — библиотека работы с MySQL
Отправлено: kostyl от 19 Январь, 2012, 11:37:53

формировать в скрипте, а не в запросе
+1
+1


Название: goDB — библиотека работы с MySQL
Отправлено: master от 20 Январь, 2012, 09:29:47
да, да, потому что
- время сервера БД может отличаться от времени сервера скрипта
- сервер БД может измениться
- серверов БД может быть несколько, и каждый со своим временем, ага


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 20 Январь, 2012, 12:16:52
- серверов БД может быть несколько, и каждый со своим временем, ага
серверов с программным кодом может быть несколько и каждый со своим временем :)


Название: goDB — библиотека работы с MySQL
Отправлено: Saniek от 24 Январь, 2012, 01:37:23
Периодически вылезает такая ошибка в кроне
 
PHP Warning:  mysqli::autocommit(): Couldn't fetch goDB in /usr/script/godb.php on line 154
PHP Warning:  mysqli::multi_query(): Couldn't fetch goDB in /usr/script/godb.php on line 393
PHP Warning:  mysqli::store_result(): Couldn't fetch goDB in /usr/script/godb.php on line 1162
PHP Warning:  goDB::multiFetch(): Couldn't fetch goDB in /usr/script/godb.php on line 1163
PHP Warning:  mysqli::more_results(): Couldn't fetch goDB in /usr/script/godb.php on line 1187
PHP Warning:  mysqli::rollback(): Couldn't fetch goDB in /usr/script/godb.php on line 209
PHP Warning:  mysqli::autocommit(): Couldn't fetch goDB in /usr/script/godb.php on line 210
PHP Fatal error:  Uncaught exception 'goDBExceptionMulti' with message 'multi results < queires' in /usr/script/godb.php:1193
Stack trace:
#0 godb.php(395): goDB->multiFetch(Array, NULL, NULL, true)
#1 cron.php(809): goDB->multiQuery(Array, Array)
#2 {main}
  thrown in /usr/script/godb.php on line 1193
 
Может кто-нибудь сталкивался с подобным, куда копать подскажите?


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 24 Январь, 2012, 02:30:45
#1 cron.php(809): goDB->multiQuery(Array, Array)
 
что сюда передаётся?


Название: goDB — библиотека работы с MySQL
Отправлено: Saniek от 25 Январь, 2012, 12:37:34
Вот запрос:
 
$sql=array();
$sql[]="INSERT INTO pages_week (date,page,cnt,cnt1,cnt2,cnt3) select date,page,sum(cnt),sum(cnt1),sum(cnt2),sum(cnt3) from pages where DATE between date1 and date2 group by page";
$sql[]="DELETE FROM pages_week WHERE date < date3;
 

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


Название: goDB — библиотека работы с MySQL
Отправлено: AlexB от 25 Январь, 2012, 03:47:38
Васяц, а на питон либу не планируешь переписать?


Название: goDB — библиотека работы с MySQL
Отправлено: phpdude от 25 Январь, 2012, 04:05:44

Васяц, а на питон либу не планируешь переписать?
а нахуй она там нужна?)


Название: goDB — библиотека работы с MySQL
Отправлено: vasa_c от 25 Январь, 2012, 04:54:46
Петон же итак охуенен, в нём всё есть.


Форум на ПЫХА.РУ