|
Название: 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,
Название: 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'): ... 2. Добавить в регэксп в public function makeQuery($pattern, $data, $prefix = '') одну букву с во вторые скобки, чтобы получилось следующее: И все... ЗЫ... В этом случае, нельзя указать таблицу для поля, кроме как вручную без крайних апострофов, например (один из вариантов), 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, да, бывает иногда не хватает....
а как данный запрос оформить? Text insert into `table` set `one` = 1, `two` = 2, `three` = 3Название: 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 $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, плейсхолдеры:
?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);Порт в хосте В любом из вариантов создания базы порт можно указывать в параметре 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 Название: 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. Имена таблиц можно заключать в {}, тогда добавляются префиксы. Название: 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 Да нафиг надо лишние проверки в коде городить. То что здесь плейсхолдер один - это частный случай. Название: goDB — библиотека работы с MySQL Отправлено: phpdude от 28 Январь, 2009, 07:54:58 хз, можно и без проверок :-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 проверки? где? Название: goDB — библиотека работы с MySQL Отправлено: vasa_c от 28 Январь, 2009, 08:02:19 phpdude, там после параметров ещё аргументы в query()
Название: goDB — библиотека работы с MySQL Отправлено: phpdude от 28 Январь, 2009, 08:08:53 нах там параметры? Название: 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 выбираю из новостей те, у которых дата меньше чем сейчас ... уевый запросец попался, видимо мой программист писал :-D, либо я пьный был ... выбираются первые 5 сортированые по дате. Название: goDB — библиотека работы с MySQL Отправлено: phpdude от 28 Январь, 2009, 08:48:48
вместо {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 Название: goDB — библиотека работы с MySQL Отправлено: adw0rd от 28 Январь, 2009, 09:13:15 чтобы тебе вместо числа гамно не заслали... а ты как преобразовываешь?
Форматы разбора Название: 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 хм .. у меня недопустимы инъекции :) допустимо что результат вернет 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 мне вот ни похуй :) залогиниться то не сможет же ;) Название: goDB — библиотека работы с MySQL Отправлено: adw0rd от 29 Январь, 2009, 12:09:15 phpdude, забей.
Название: goDB — библиотека работы с MySQL Отправлено: phpdude от 29 Январь, 2009, 12:28:10 да сер! Название: goDB — библиотека работы с MySQL Отправлено: Batler от 01 Февраль, 2009, 05:49:31
Если столбец числового типа, то MySQL тратит время на приведение типа (строка -> число) Название: goDB — библиотека работы с MySQL Отправлено: phpdude от 01 Февраль, 2009, 07:27:35 и ты в это веришь? какты думаешь, что дольше будет обрабатываться? мой этот костыль, или твои хуево написанные запросы? :) Название: 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 повторюсь, я не делаю приведение типов. Название: 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))); } 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: Название: 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;`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 <?phpclass 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 в файле 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. 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 Название: goDB — библиотека работы с MySQL Отправлено: Абырвалг от 20 Ноябрь, 2009, 01:08:55 Вот у меня такой запросец сейчас получился:
SQL SELECTm.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'В перспективе хочу сделать "единую" либу для обеих баз, т.к. иногда нужно по работе. Правда хз насколько это будет полезно общественности но результат обязательно выложу, если лень не заест. Спасибо за внимание, буду рад любым замечаниям, особенно баг репортам :) Название: 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 ололО! адворд, рерайты? Название: 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 '%\%'Название: 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 предлагаю допилять для ?с
Название: 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 — библиотека работы с 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 почему экранируется символ "
Название: 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 ООО \"Студия Дизайна\"Название: goDB — библиотека работы с MySQL Отправлено: Troy от 10 Июнь, 2010, 03:16:48 ммм так же экранирует ? Оо
Название: goDB — библиотека работы с MySQL Отправлено: mario от 10 Июнь, 2010, 03:22:57 +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 до этого места:
Название: 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 круто. документация еще никому не мешала. уже в 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; } } Название: 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 Чего же в нем не стандартного? Роллбэк это в любом случае форс-мажор, поэтому ИМХО совершенно логично сделать его эксепшеном. Не забываем, что в роллбэке могут быть и другие действия, кроме непосредственно работы с базой, например, удаление лишних файлов. И очень здорово, когда весь "аварийный" код сосредоточен в отдельном месте. Название: 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 входные данные (те, которые должны заменить плейсхолдеры), передаются отдельными аргументами методакстати, я в свое время и написал свою либу, так как мне удобнее передавать много аргументов (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 не так давно на эту тему был замечательный срач. 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
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 Чесно говоря, не знаю как лучше сделать. Надо думать. Возникнут мысли - изложу. Но то что при переменном количестве условий формировать запрос динамически не совсем удобно - это факт. Тем более что вместе с запросом, еще динамически массив подстановок формировать, хотелось бы как-то это все упростить. Название: 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 последняя запись: goDB 1.2.2 Спустя 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 Название: 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 Дык в 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
bool mysql_set_charset (string $charset [, resource $link_identifier]) Название: goDB — библиотека работы с MySQL Отправлено: vasa_c от 19 Январь, 2011, 01:29:04 fgets, mysql_set_charset тоже не рекомендуется, рекомендуется mysqli :)
только смысл не меняется, чтобы вызвать эту функцию, всё равно подключиться нужно сначала. Название: goDB — библиотека работы с MySQL Отправлено: fgets от 19 Январь, 2011, 02:25:40
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 А на хуя спрашивается?:D Только что б красиво было, или боитесь что база сама себе инъекцию сделает?D Название: goDB — библиотека работы с MySQL Отправлено: Givi от 18 Январь, 2012, 01:26:36 =))) База-суицидистка.
Название: goDB — библиотека работы с MySQL Отправлено: Alexmorbo от 18 Январь, 2012, 01:40:47 Чтобы красиво было (: ну и база суицидница, да (: Название: 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 Название: 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 Петон же итак охуенен, в нём всё есть.
|