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

Нерелевантно. (elpaso)
Author Message
Дмитрий Котеров
Администратор



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


PostPosted: Tue Jan 23, 2007 3:05 pm ()
   Post subject:
Reply with quote


М

Выделено из темы «DbSimple v2.x: лаконичная работа с различными СУБД»,
расположенной в форуме Конструктор (31 Января 2007, 00:27).
Back to top
View user's profile Send private message Send e-mail
elpaso
Заглянувший



Joined: 05 Jan 2007
Posts: 17
Карма: 3
   поощрить/наказать


PostPosted: Tue Jan 23, 2007 3:05 pm (спустя 1 секунду; написано за 1 минуту 18 секунд)
   Post subject:
Reply with quote

Нашел небольшой баг в вашем примере из статьи
Это касается использования ARRAY_KEY

Такой запрос
Code (php): скопировать код в буфер обмена
$users = $DB->select('SELECT id AS ARRAY_KEY, * FROM `'.TABLE_USERS.'` ');
дает ошибку
Code (php): скопировать код в буфер обмена
[code] => 1064
[message] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL (www.php.net/mysql) server version for the right syntax to use near '* FROM `users`' at line 1
[query] => SELECT id AS ARRAY_KEY, * FROM `users`
А вот так отлично срабатывает
Code (php): скопировать код в буфер обмена
$users = $DB->select('SELECT u.id AS ARRAY_KEY, u.* FROM `'.TABLE_USERS.'` u');
Back to top
View user's profile Send private message
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Tue Jan 23, 2007 3:46 pm (спустя 41 минуту; написано за 54 секунды)
   Post subject:
Reply with quote

Просто не надо писать запросы с ошибками )))
Выполните в консоли свой запрос и изучайте SQL, однако!
Back to top
View user's profile Send private message
Guest






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


PostPosted: Wed Jan 24, 2007 6:54 pm (спустя 1 день 3 часа 8 минут; написано за 4 минуты 55 секунд)
   Post subject:
Reply with quote

Никак не могу понять, как сделать selectpage, но с макроподстановками?

Вот простой select (взят из примера)
Code (SQL): скопировать код в буфер обмена
$rows = $DB->select('SELECT * FROM goods WHERE  category_id = ? { AND activated_at > ? }',
        $categoryId, (empty($_POST['activated_at'])? DBSIMPLE_SKIP : $_POST['activated_at'])
);
тут все понятно.

Вот selectpage
Code (SQL): скопировать код в буфер обмена
$rows = $DB->selectPage($totalRows,'SELECT * FROM ?_users WHERE category_id = ? { AND activated_at > ? }
             LIMIT ?d, ?d'
, $from, $pageSize);
Этот запрос заведомо ошибочен, потому что, я не представляю, куда тут надо "впихнуть":
Code (SQL): скопировать код в буфер обмена
(empty($_POST['activated_at'])? DBSIMPLE_SKIP : $_POST['activated_at'])
Подскажите, пожалуйста.

p.s. наверное надо делать простой select, но с указанием LIMIT
Back to top
Guest






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


PostPosted: Wed Jan 24, 2007 10:27 pm (спустя 3 часа 32 минуты; написано за 3 минуты 33 секунды)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
$a_a = @ $_POST['activated_at'] || DBSIMPLE_SKIP;
$rows = $DB->selectPage($totalRows, 'SELECT * FROM ?_users WHERE
category_id = ? { AND activated_at > ? } LIMIT ?d, ?d'
,
              $cat_id,               $a_a,     $from, $pageSize);
Back to top
Дмитрий Котеров
Администратор



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


PostPosted: Thu Jan 25, 2007 9:12 am (спустя 10 часов 44 минуты; написано за 2 минуты 31 секунду)
   Post subject:
Reply with quote

Я бы рекомендовал таже вот тек выравнивать:
Code (php): скопировать код в буфер обмена
$rows = $DB->selectPage($totalRows, '
        SELECT *
        FROM ?_users
        WHERE
            category_id = ?
          { AND activated_at > ? }
        LIMIT ?d, ?d
    '
,
    $cat_id,
    (@$_POST['activated_at']? $_POST['activated_at'] : DBSIMPLE_SKIP),
    $from, $pageSize
);
Это выглядит сильно длиннее, зато читается гораздо лучше.
Back to top
View user's profile Send private message Send e-mail
Guest






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


PostPosted: Thu Jan 25, 2007 1:57 pm (спустя 4 часа 44 минуты; написано за 20 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Спасибо. Клевая библиотека!
Back to top
slmark
Участник форума



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

Location: Минск, Беларусь

PostPosted: Mon Jan 29, 2007 3:11 pm (спустя 4 дня 1 час 14 минут; написано за 3 минуты 29 секунд)
   Post subject:
Reply with quote

Здравствуйте.
Сразу хочу поблагодарить за сие чудо, раньше пользовался библиотекой placeholder's сейчас перешел на DBSimple - отличная штука. И у меня есть по ней 2 вопроса:
1. Как при помощи DBSimple создать непосредственно БД? Как выход я сейчас создаю БД "стандартными" средствами PHP, а дальше DBSimple, есть ли другое решение?
2. Когда использую DBSimple в функциях получаю следующее сообщение "Error: Call to a member function on a non-object.."
Подскажите, пожалуйста, как бороться :)
Спасибо
Back to top
View user's profile Send private message
Satyrius
Участник форума



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

Location: Москва

PostPosted: Mon Jan 29, 2007 11:53 pm (спустя 8 часов 41 минуту; написано за 1 минуту 17 секунд)
   Post subject:
Reply with quote

  1. Средствами SQL
    Code (SQL): скопировать код в буфер обмена
    CREATE DATABASE MyDB
  2. А Вы код покажите...
Back to top
View user's profile Send private message
slmark
Участник форума



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

Location: Минск, Беларусь

PostPosted: Tue Jan 30, 2007 9:34 am (спустя 9 часов 41 минуту; написано за 3 минуты 42 секунды)
   Post subject:
Reply with quote

Satyrius wrote:
  1. Средствами SQL
    Code (SQL): скопировать код в буфер обмена
    CREATE DATABASE MyDB
Спасибо, не знаю, почему у меня не получалось (дело не в sql а в коннекте к бд :))


-------
Satyrius wrote:
  • А Вы код покажите...
  • Файл index.php
    Code (php): скопировать код в буфер обмена
    require_once('inc/func.php');

    require_once ('inc/db/lib/config.php');
    require_once ('inc/db/lib/DbSimple/Generic.php');

    $DB = DbSimple_Generic::connect('mysql://root:@localhost/tb3');

    echo (www.php.net/echo) getUsersNumber();
    Файл func.php:
    Code (php): скопировать код в буфер обмена
    <?php
    function getUsersNumber()
    {
            $rows = $DB->select('SELECT user_id FROM tb_user');
            return $rows;
    }
    ?>
    Итог:
    Quote:
    Fatal error: Call to a member function on a non-object in x:\home\t\www\inc\func.php on line 4
    Спасибо.
    Back to top
    View user's profile Send private message
    Satyrius
    Участник форума



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

    Location: Москва

    PostPosted: Tue Jan 30, 2007 3:51 pm (спустя 6 часов 16 минут; написано за 4 минуты 58 секунд)
       Post subject:
    Reply with quote

    slmark
    А вы с PHP давно работаете? Слышали про области видимости переменных?
    Вы объявляете $DB в глобальной области, а затем пытаетесь использовать в области видимости функции. Но в области видимости функуии переменной $DB нет! Вы обращаетесь к неинициализированному объекту, вот и получается что вы пытаетесь вызвать метод "необъекта". Если хотите использовать $DB то надо делать так:
    Code (php): скопировать код в буфер обмена
    <?php
    function getUsersNumber()
    {
            global (www.php.net/global) $DB; //
            $rows = $DB->select('SELECT user_id FROM tb_user');
            return $rows;
    }
    ?>
    Можно еще $DB передавать функции в аргументах.
    Back to top
    View user's profile Send private message
    slmark
    Участник форума



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

    Location: Минск, Беларусь

    PostPosted: Tue Jan 30, 2007 4:59 pm (спустя 1 час 7 минут; написано за 54 секунды)
       Post subject:
    Reply with quote

    Satyrius,
    Огромное спасибо.
    Моя проблема в том, что я никогда не занимался ООП. Спасибо.
    Back to top
    View user's profile Send private message
    Satyrius
    Участник форума



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

    Location: Москва

    PostPosted: Tue Jan 30, 2007 11:13 pm (спустя 6 часов 13 минут; написано за 1 минуту 21 секунду)
       Post subject:
    Reply with quote

    slmark
    Тут не в ООП проблема была, а в том что вы не разбираетесь в области видимости переменных. Вот, почитайте в мануале (www.php.net/manual/en/language.variables.scope.php).
    Back to top
    View user's profile Send private message
    Display posts from previous:   
    Post new topic   Reply to topic All times are GMT + 3 Hours
    Page 1 of 1    Email to a Friend.
    You cannot post new topics in this forum. You cannot 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