Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

6_DbSimple version 1.x: лаконичная работа с различными СУБД (Дмитрий Котеров, оценка: 6)
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
Author Message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

Location: Россия, Санкт-Петербург

PostPosted: Tue Jul 25, 2006 9:30 am (написано за 11 секунд)
   Post subject:
Reply with quote

Похоже что тоже
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Jul 25, 2006 10:29 am (спустя 58 минут; написано за 1 минуту 40 секунд)
   Post subject:
Reply with quote

Путник wrote:
что вы думаете на счет возможности передавать параметры для всех плейсхолдеров в виде одного массива
Внутри самой библиотеки такой метод есть, однако он "приватный". Вообще, мне кажется, в передаче всех параметров в виде одного массива нет необходимости, т.к.:
1. В PHP есть функция php.net/call_user_func_array
2. Это ухудшает читабельность кода.
3. В DbSimple 2.0 в связи с введением "опциональных блоков" в SQL-выражении отпадает необходимость устраивать ветвления, когда параметры то передаются, то нет.
Back to top
View user's profile Send private message Send e-mail
Путник
Участник форума



Joined: 19 Mar 2006
Posts: 40
Карма: 1
   поощрить/наказать


PostPosted: Wed Jul 26, 2006 2:31 pm (спустя 1 день 4 часа 2 минуты; написано за 28 секунд)
   Post subject:
Reply with quote

Тогда с нетерпением ждем финальный релиз 2.0!
Back to top
View user's profile Send private message Send e-mail
Andrew Stephanoff
Заглянувший



Joined: 15 Feb 2006
Posts: 15
Карма: 0
   поощрить/наказать

Location: Belarus, Minsk

PostPosted: Thu Aug 10, 2006 11:46 pm (спустя 15 дней 9 часов 14 минут; написано за 6 минут 7 секунд)
   Post subject:
Reply with quote

Иногда бывает нужно возвратить двухмерный массив, где элементами будут не массивы, а строки / числа. Это, например, удобно для Smarty, когда требуется использовать html_checkboxes html_options html_radios, где в качестве options подставляется ассоциативный массив, где ключи массива - значения тега value, а элементы массива -- подписи для labels или options. Однако, SQL запрос типа
Code (SQL): скопировать код в буфер обмена
SELECT `id` AS ARRAY_KEY,`text` FROM `table`
возвращает массив
Code (php): скопировать код в буфер обмена
array (www.php.net/array)(
        "1" => array (www.php.net/array)("text_1"),
        "2" => array (www.php.net/array)("text_2)
)
Предлагаю модифицировать метод _transform2hash : в случае, когда размер массива равен 1, возвращать не массив, а строку.
Code (php): скопировать код в буфер обмена
    function _transform2hash($rows, $ak) {
        $result = array (www.php.net/array)();
        foreach ($rows as $row) {
            $k = $row[$ak];
            unset (www.php.net/unset)($row[$ak]);
            if (sizeof (www.php.net/sizeof)($row) == 1) {
                $row = array_values (www.php.net/array_values)($row);
                $result[$k] = $row[0];
            } else {
                $result[$k] = $row;
            }
        }
        return $result;
    }
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

Location: Россия, Санкт-Петербург

PostPosted: Fri Aug 11, 2006 9:36 am (спустя 9 часов 50 минут; написано за 27 секунд)
   Post subject:
Reply with quote

Andrew Stephanoff wrote:
Однако, SQL запрос возвращает массив
Используйте для вызова метод SelectCol.
Back to top
View user's profile Send private message
Andrew Stephanoff
Заглянувший



Joined: 15 Feb 2006
Posts: 15
Карма: 0
   поощрить/наказать

Location: Belarus, Minsk

PostPosted: Fri Aug 11, 2006 2:36 pm (спустя 4 часа 59 минут; написано за 33 секунды)
   Post subject:
Reply with quote

Точно, я невнимательно читал документацию :(
Back to top
View user's profile Send private message
Silex
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sun Aug 13, 2006 6:18 pm (спустя 2 дня 3 часа 42 минуты; написано за 2 минуты 39 секунд)
   Post subject:
Reply with quote

Я так понимаю, что здесь dklab.ru/lib/DbSimple/demo.zip лежит далеко не последняя версия. Где можно взять свежую версию?
Файл connect.php в директории /test/DbSimple дан для просто примера и нигде не используется?
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue Aug 15, 2006 10:59 am (спустя 1 день 16 часов 40 минут; написано за 2 минуты 14 секунд)
   Post subject:
Reply with quote

Хотелось бы уточнить:
для корректного SQL-запроса достаточно передавать параметров не меньше, чем плейсхолдеров (то есть "лишние" параметры просто игнорируются)?
И это справедливо для любого метода?
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Aug 16, 2006 9:43 am (спустя 22 часа 44 минуты; написано за 32 секунды)
   Post subject:
Reply with quote

По идее, да. Я не припоминаю, что где-то ставил проверку на превышение числа параметров. Ее вот и в sprintf нет...
Back to top
View user's profile Send private message Send e-mail
Nadir
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Aug 18, 2006 7:03 am (спустя 1 день 21 час 19 минут; написано за 28 секунд)
   Post subject: v 2
Reply with quote

Так когда же будет версия 2?
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Aug 18, 2006 10:30 am (спустя 3 часа 26 минут; написано за 5 минут 45 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Похоже, есть ошибка: метод selectRow в случае корректной пустой выборки возвращает false. Остальные методы дают на выходе правильный пустой массив (кроме selectCell - тот возвращает, разумеется, null).

// Если кто не понимает:
Ошибка это потому, что
Code (php): скопировать код в буфер обмена
count (www.php.net/count)(false)
даёт единицу
Back to top
View user's profile Send private message
Maxim Kalenkov
Заглянувший



Joined: 27 May 2004
Posts: 9
Карма: 0
   поощрить/наказать

Location: Москва

PostPosted: Fri Aug 18, 2006 1:35 pm (спустя 3 часа 5 минут; написано за 11 минут 13 секунд)
   Post subject: К вопросу об именованных placeholderах
Reply with quote

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

Потому возникает такой вопрос - нельзя ли всё-таки вернуть именованные placeholderы, или хотябы вынести в публичные методы подстановку placeholderов. Или данный сценарий использования для данной библиотеки черезчур сложный и библиотека не для этого?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Aug 21, 2006 12:02 pm (спустя 2 дня 22 часа 26 минут; написано за 56 секунд)
   Post subject:
Reply with quote

Maus
Code (any language): скопировать код в буфер обмена
    function selectRow()
    {
        $args = func_get_args();
        $rows = $this->_query($args, $total=false);
        if (!is_array($rows)) return $rows;
        if (!count($rows)) return array();
        reset($rows);
        return current($rows);
    }
В случае корректной пустой выборки query() возвращает array(). Так что ну никак не может быть того, что ты описал.
Пожалуйста, приведи тестовый пример кода.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Aug 21, 2006 12:04 pm (спустя 2 минуты; написано за 1 минуту)
   Post subject:
Reply with quote

Maxim Kalenkov wrote:
Имется такая задача - строить SQL запрос в два этапа, т.е. сначала добавить к некоему каркасу несколько частей (возможно в середине), а потом подставить значения placeholderов как в каркас, так и в новые части.
В DbSimple 2.x эта проблема решается другим способом (на мой взгляд, более наглядным и универсальным): условными блоками. Читайте выше комментарии, это уже обсуждалось. (Для пропуска того или иного блока используйте константу DBSIMPLE_SKIP.)
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Mon Aug 21, 2006 2:35 pm (спустя 2 часа 31 минуту; написано за 3 минуты 18 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Пожалуйста, приведи тестовый пример кода
Рассчитано на стандартный Денвер с PHP4
Code (php): скопировать код в буфер обмена
<?php
require_once 'lib/config.php';
require_once ('DbSimple/DSN.php');

function _databaseErrorHandler($message, $info)
{
    // Если использовалась @, ничего не делать.
    if (!error_reporting (www.php.net/error_reporting)()) return;
    // Выводим подробную информацию об ошибке. Причем в консоль или в никуда
    if (function_exists (www.php.net/function_exists)('dbg_msg'))
    {
        dbg_msg('SQL Error: '.$message, 'sql_errors');
        dbg_msg($info, 'sql_errors');
    }
}

$dsn = sprintf (www.php.net/sprintf)('mysql://%s:%s@%s/%s',
                'root', '', 'localhost', 'mysql');

// Подключаемся к БД.
$DATABASE = DbSimple_DSN::connect($dsn);
// Устанавливаем обработчик ошибок.
$DATABASE->set_error_handler('_databaseErrorHandler');

// Стартуем новую транзакцию.
$db = $DATABASE->transaction();

$r = $db->select('SELECT * FROM non_exist_table');
echo (www.php.net/echo) '<br>select ';
var_dump (www.php.net/var_dump)($r);
$r = $db->select('SELECT * FROM `user` where host="_" ');
echo (www.php.net/echo) '<br>select ';
var_dump (www.php.net/var_dump)($r);
$r = $db->selectCell('SELECT * FROM non_exist_table');
echo (www.php.net/echo) '<br>selectCell ';
var_dump (www.php.net/var_dump)($r);
$r = $db->selectCell('SELECT `host` FROM `user` where `host`="_" LIMIT 1 ');
echo (www.php.net/echo) '<br>selectCell ';
var_dump (www.php.net/var_dump)($r);
$t = $db->selectCol('SELECT `host` FROM non_exist_table');
echo (www.php.net/echo) '<br>selectCol ';
var_dump (www.php.net/var_dump)($t);
$t = $db->selectCol('SELECT `host` FROM `user` where host="_" ');
echo (www.php.net/echo) '<br>selectCol ';
var_dump (www.php.net/var_dump)($t);
$r = $db->selectRow('SELECT * FROM non_exist_table');
echo (www.php.net/echo) '<br>selectRow ';
var_dump (www.php.net/var_dump)($r);
$r = $db->selectRow('SELECT * FROM `user` where host="_" ');
echo (www.php.net/echo) '<br>selectRow ';
var_dump (www.php.net/var_dump)($r);
$r = $db->query('SELECT * FROM non_exist_table');
echo (www.php.net/echo) '<br>query ';
var_dump (www.php.net/var_dump)($r);
$r = $db->query('SELECT * FROM `user` where host="_" ');
echo (www.php.net/echo) '<br>query ';
var_dump (www.php.net/var_dump)($r);

?>
результат:
Code (any language): скопировать код в буфер обмена
select NULL
select array(0) { }
selectCell NULL
selectCell NULL
selectCol NULL
selectCol array(0) { }
selectRow NULL
selectRow bool(false)
query NULL
query array(0) { }
Объясняется просто: если скачать библиотеку с сайта, то там код метода несколько иной:
Code (php): скопировать код в буфер обмена
    function selectRow()
    {
        $args = func_get_args (www.php.net/func_get_args)();
        $rows = $this->_query($args, $total=false);
        if (!is_array (www.php.net/is_array)($rows)) return $rows;
        reset (www.php.net/reset)($rows);
        return current (www.php.net/current)($rows);
    }
в общем, я заменил в методе строчку
Code (php): скопировать код в буфер обмена
return current (www.php.net/current)($rows);
на
Code (php): скопировать код в буфер обмена
return (false===current (www.php.net/current)($rows)) ? array (www.php.net/array)() : current (www.php.net/current)($rows);
и пользуюсь дальше (-;
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Aug 23, 2006 9:13 am (спустя 1 день 18 часов 37 минут; написано за 55 секунд)
   Post subject:
Reply with quote

А... на сайте... с этого надо было начинать. :-)
Ну, версия на сайте почти не обновляется уже. Скоро выложу DbSimple 2.0, там многое исправлено.
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Wed Aug 23, 2006 9:57 am (спустя 44 минуты; написано за 1 минуту 12 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
версия на сайте почти не обновляется уже
Дык а где ж брать свежие версии простому народу?
Ждать - это замечательно! Но работать всё-таки надо...
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Aug 24, 2006 6:22 pm (спустя 1 день 8 часов 24 минуты; написано за 15 секунд)
   Post subject:
Reply with quote

В этом топике были вложения, там она и есть.
Back to top
View user's profile Send private message Send e-mail
Garret
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Aug 30, 2006 7:32 pm (спустя 6 дней 1 час 9 минут; написано за 7 минут 56 секунд)
   Post subject:
Reply with quote

Честно говоря сильно разочаровал этот класс с производительностью, а я надеялся :(

Провел небольшой тест. Linux, Apache 1.3, PHP 4.3, MySQL 4.1.11.
Проверялась скорость выборки записей из таблицы, и скорость инсертов.

1) INSERT:
   - Вставка 10000 записей в базу с использованием обычного mysql_query в цикле заняла 4.32 секунды(100 тыс. - 43.8 сек)
   - Вставка посредством класса DbSimple 10 тыс. записей - 10.42 сек.(100 тыс. просто не осилил, отпал чего то)

Ну и где "оптимизированые prepare+execute"? Или я чего то не пойму?

2) SELECT:
   - Выборка 100000 записей посредством mysql_query занала 0.77 секунд.
   - Выборка 100000 записей посредством DbSimple - просто отпадает(осиливает только 20000 записей). Я так понимаю что $DB->select возвращает массив данных, но я не думаю что скрипт отпадал потому что не хватало оперативы.

Если это не так или я в чем то не прав, просьба объяснить мне :)
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Wed Aug 30, 2006 10:21 pm (спустя 2 часа 49 минут; написано за 10 минут 8 секунд)
   Post subject:
Reply with quote

Этот класс не предназначен для вставки или выборки нескольких тысяч записей.
Он предназначен для удобной и быстрой разработки веб-приложений, а это в наше время очень актуально.
Реальные веб-приложения делают всего несколько запросов к БД, чтобы получить или изменить данные.
Время затраченное работу класса при нескольких запросах минимально и не критично.
Back to top
View user's profile Send private message Send e-mail
Garret
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Aug 31, 2006 9:21 am (спустя 11 часов 2 секунды; написано за 1 минуту 59 секунд)
   Post subject:
Reply with quote

Ясно, тоесть с быстродействием тоже самое что и у AdoDB и PearDB.

Ну да ладно со вставкой, но выборка 100к записей эта самая что ни на есть тривиальная задача. С которой я например сталкиваюсь очень часто.
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Thu Aug 31, 2006 10:21 am (спустя 59 минут; написано за 1 минуту 4 секунды)
   Post subject:
Reply with quote

Garret
и Вы информацию из всех этих 100к записей используете? Что же это за проект такой (хотя бы в общих чертах)??
Back to top
View user's profile Send private message
Garret
Заглянувший



Joined: 31 Aug 2006
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Thu Aug 31, 2006 1:24 pm (спустя 3 часа 3 минуты; написано за 1 минуту 46 секунд)
   Post subject:
Reply with quote

Maus не буду говорить о каком то конкретно проекте. Возьмем к примеру какую либо статистику(пусть там по регистрациям пользователей или еще что то, не важно). На крупном ресурсе 100к записей совсем не много.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Thu Aug 31, 2006 1:48 pm (спустя 23 минуты; написано за 2 минуты 30 секунд)
   Post subject:
Reply with quote

Garret wrote:
Возьмем к примеру какую либо статистику
Любую вычислительно тяжелую работу (типа статистики) разумнее ставить в крон, а пользователю показывать уже обсчитанные результаты. Иначе к Вам зайдут одновременно NN посетителей посмотреть статистику - и сервер ляжет.
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Aug 31, 2006 1:48 pm (спустя 18 секунд; написано за 9 секунд)
   Post subject:
Reply with quote

Garret
Вы же не все 100000 записей сразу выбираете?
Back to top
View user's profile Send private message Send e-mail
Garret
Заглянувший



Joined: 31 Aug 2006
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Thu Aug 31, 2006 3:53 pm (спустя 2 часа 5 минут; написано за 2 минуты 42 секунды)
   Post subject:
Reply with quote

Maus эта статистика не для пользователей конечно.

Юpий Насрeтдинов ну почему же? Предположим мне нужно сгруппировать пользователей по какому то рефферскому параметру и вывести на страницу, даже если количество разных параметров 20000 то все равно обработаны будут все 100к записей. Если пугают цифры в 100 тыс. то скажу, что у меня скрипт отваливался после выборки 30к записей.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Thu Aug 31, 2006 4:52 pm (спустя 58 минут; написано за 4 минуты 30 секунд)
   Post subject:
Reply with quote

Garret
хм, у меня отработал (с консоли) скрипт, использующий DBSimple и делающий 2 селекта с конструкцией AS ARRAY_KEY - один на 27500 записей, другой ~59000 . Скрипт отработал за 33 секунды. Платформа Windows, PHP 4.4.3, MySQL 4.0.x на сервере под freeBSD. Если я правильно понял, пиковый расход памяти у PHP был ~200Мб . Отложенное копирование учитывалось
Back to top
View user's profile Send private message
Satyrius
Участник форума



Joined: 28 Mar 2006
Posts: 110
Карма: 2
   поощрить/наказать

Location: Москва

PostPosted: Thu Aug 31, 2006 6:26 pm (спустя 1 час 34 минуты; написано за 3 минуты 21 секунду)
   Post subject:
Reply with quote

Дмитрий Котеров
В статье написано
Quote:
В INSERT-запросах возвращается значение автоинкрементного поля (если оно имелось в таблице).
А как проверить выполнился ли INSERT, если нет автоинкрементного поля? Например mysql_query возвращает следующее
Quote:
For other type of SQL statements, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
Не могли бы Вы дать полную информацию о возвращаемых функциями значениях.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Thu Aug 31, 2006 6:51 pm (спустя 24 минуты; написано за 47 секунд)
   Post subject:
Reply with quote

Satyrius
Вы, имхо, цитируете не то:
Quote:
The ID generated for an AUTO_INCREMENT column by the previous INSERT query on success, 0 if the previous query does not generate an AUTO_INCREMENT value, or FALSE if no MySQL connection was established.
Back to top
View user's profile Send private message
Satyrius
Участник форума



Joined: 28 Mar 2006
Posts: 110
Карма: 2
   поощрить/наказать

Location: Москва

PostPosted: Thu Aug 31, 2006 7:39 pm (спустя 47 минут; написано за 6 минут 18 секунд)
   Post subject:
Reply with quote

Maus
Цитирую я как раз то
PHP Manual wrote:
mysql_query

Return Values
For SELECT, SHOW, DESCRIBE or EXPLAIN statements, mysql_query() returns a resource on success, or FALSE on error.

For other type of SQL statements, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
А мне интересно как ведет себя функция Дмитрия, что она возвращает при неудачном выполнении. С автоинкрементными полями все ясно, если все прошло нормально, то вернет значение поля, если нет, что 0. А если у меня нет автоинкрементного поля, например
Code (SQL): скопировать код в буфер обмена
CREATE TABLE user (
    user char(20) NOT NULL PRIMARY KEY,
    ...
);
Я делаю вставку в таблицу
Code (php): скопировать код в буфер обмена
$DB->query('INSERT INTO user SET user=?', $new_user);
и как мне узнать выполнился ли данный запрос?
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Sep 01, 2006 10:06 am (спустя 14 часов 27 минут; написано за 2 минуты 32 секунды)
   Post subject:
Reply with quote

Satyrius
при чем тут mysql_query?? Вы бы в код библиотеки заглянули
DbSimple_Mysql_Transaction::_performQuery($queryMain, $withTotal) :
Code (php): скопировать код в буфер обмена
//...
        if (preg_match (www.php.net/preg_match)('/^\s* INSERT \s+/six', $queryMain[0])) {
            // INSERT queries return generated ID.
            return @mysql_insert_id (www.php.net/mysql_insert_id)($this->trans);
        }
        return $result;
    }
Цитату из мануала я Вам давал. Так что проверяйте результат на нетождественность false и всё
Back to top
View user's profile Send private message
Satyrius
Участник форума



Joined: 28 Mar 2006
Posts: 110
Карма: 2
   поощрить/наказать

Location: Москва

PostPosted: Fri Sep 01, 2006 5:04 pm (спустя 6 часов 58 минут; написано за 2 минуты 36 секунд)
   Post subject:
Reply with quote

Maus
Чудеса прям! Вчера писал скрипт, проверял результат INSERTа на тождественность (===) false, ниче не работало. Щас написал небольшой тестовый скриптик - все работает как надо.

Если кому-то будет интересно - пилагаю исходники тестового примера.


www.zip
 Description:

Download
 Filename:  www.zip
 Filesize:  36.02 KB
 Downloaded:  368 Time(s)

Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Sep 01, 2006 5:28 pm (спустя 23 минуты; написано за 1 минуту 36 секунд)
   Post subject:
Reply with quote

Satyrius
кстати, в аттаче DBSimple как минимум с одним багом. ДК писал, что где-то на просторах этой темы выкладывал более свежую версию, но мне лень её искать было..
Back to top
View user's profile Send private message
Satyrius
Участник форума



Joined: 28 Mar 2006
Posts: 110
Карма: 2
   поощрить/наказать

Location: Москва

PostPosted: Fri Sep 01, 2006 7:36 pm (спустя 2 часа 8 минут; написано за 2 минуты 6 секунд)
   Post subject:
Reply with quote

Maus wrote:
но мне лень её искать было
Меня тоже ломает ее искать... как-то пробывал найти свежую версию в аттачах, но так и не нашел... наверно плохо смотрел. А так, жду когда Дмитрий выложит новую версию в статье или еще где-нибудь и скажет "качать от сюда!".
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Sun Sep 03, 2006 2:23 pm (спустя 1 день 18 часов 47 минут; написано за 45 секунд)
   Post subject:
Reply with quote

Satyrius
На пятой странице посмотрите. Но там только под MySQL
Back to top
View user's profile Send private message
Satyrius
Участник форума



Joined: 28 Mar 2006
Posts: 110
Карма: 2
   поощрить/наказать

Location: Москва

PostPosted: Sun Sep 03, 2006 6:06 pm (спустя 3 часа 42 минуты; написано за 37 секунд)
   Post subject:
Reply with quote

Maus
Спасибо. Мне, собственно, только MySQL и нужен.
Back to top
View user's profile Send private message
Satyrius
Участник форума



Joined: 28 Mar 2006
Posts: 110
Карма: 2
   поощрить/наказать

Location: Москва

PostPosted: Mon Sep 04, 2006 5:49 pm (спустя 23 часа 43 минуты; написано за 4 минуты 56 секунд)
   Post subject:
Reply with quote

Maus
Не могли бы Вы мне подсказать вот что. В исходном виде (в том который в статье) в библиотеке следующий набор файлов:
Code (any language): скопировать код в буфер обмена
DbSimple\Abstract\Database.php
DbSimple\DSN.php
DbSimple\Ibase.php
DbSimple\Mysql.php
и в скрипте надо подключать файл DNS.php. А в новом варианте, на который Вы мне указали, имеются следующие файлы:
Code (any language): скопировать код в буфер обмена
DbSimple\Generic.php
DbSimple\Mysql.php
Что надо заменить Mysql.php это ясно. А куда девать Generic.php? Он вместо DNS.php теперь что-ли? И нужен ли файл Abstract\Database.php?
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

Location: Россия, Санкт-Петербург

PostPosted: Mon Sep 04, 2006 10:49 pm (спустя 4 часа 59 минут; написано за 25 секунд)
   Post subject:
Reply with quote

Satyrius
Теперь нужны только эти файлы. От старых можете избавиться.
Back to top
View user's profile Send private message
Антон Макаренко
Участник форума



Joined: 05 Feb 2004
Posts: 374
Карма: 31
   поощрить/наказать

Location: Киев

PostPosted: Tue Sep 05, 2006 10:27 am (спустя 11 часов 37 минут; написано за 5 минут 13 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Как думаете, есть ли резон вырезать конструкцию GROUP BY, делая подзапрос в selectPage()?
А то выходит, что COUNT(*)-то считает, но разбивает выборку согласно группировке. Например:
Code (SQL): скопировать код в буфер обмена
    SELECT FIRST 50 SKIP 0
        e.AIT_EMAIL_ID, e.AIT_EMAIL_ADDRESS, e.AIT_EMAIL_LASTVISIT
        ,MIN(u.AIT_USER_PURCHASEDATE) AS AIT_USER_PURCHASEDATE
    FROM AIT_EMAIL e INNER JOIN AIT_USER u ON e.AIT_EMAIL_ID=u.AIT_EMAIL_ID
    GROUP BY e.AIT_EMAIL_ID, e.AIT_EMAIL_ADDRESS, e.AIT_EMAIL_LASTVISIT
    ORDER BY e.AIT_EMAIL_LASTVISIT DESC
-- 402 ms = 392+6+4; returned 50 row(s)

--
    SELECT COUNT(*) AS C
    FROM AIT_EMAIL e INNER JOIN AIT_USER u ON e.AIT_EMAIL_ID=u.AIT_EMAIL_ID
    GROUP BY e.AIT_EMAIL_ID, e.AIT_EMAIL_ADDRESS, e.AIT_EMAIL_LASTVISIT
  -- 481 ms = 34+300+147; returned 1938 row(s)
 
p.s. если использовать "GROUP BY 1,2,3", то (и не удивительно) подзапрос выдает ошибку.
p.p.s. правда, результата внятного все равно не получается. В данном случае мне-то нужно получить именно 1938, а без группировки получается 2624 строки...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Sep 06, 2006 9:43 am (спустя 23 часа 16 минут; написано за 40 секунд)
   Post subject:
Reply with quote

По-хорошему надо не вырезать, а переносить то, что написано в GROUP BY XXX, внутрь COUNT(DISTINCT XXX).
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies. All times are GMT + 3 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
Page 6 of 10    Email to a Friend.
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML