ФорумПрограммированиеПыхнуть хотите?Готовые решения → goDB — библиотека работы с MySQL

goDB — библиотека работы с MySQL

  • alexxx

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 13 ноября 2009 г. 0:16, спустя 1 час 11 минут 43 секунды

    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
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 13 ноября 2009 г. 12:21, спустя 12 часов 5 минут 29 секунд

    in (?a;);"


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

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 13 ноября 2009 г. 12:52, спустя 30 минут 27 секунд

    нет не лишнии разобрался все прекрасно работает

    подключаюсь так

    		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;);"

    иначе префикс таблицы не подставляется имя таблицы надо брать в фигурные скобки в документации не встречал данного замечания мож не внимательно читал
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 13 ноября 2009 г. 13:55, спустя 1 час 3 минуты

    alexxx,
    "SELECT `id`, `parent`, `alias` FROM ?t WHERE `id` in (?a;);", array('site_content', array(1,2,3)) 

    то так тоже работать должен префикс
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • alexxx

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 13 ноября 2009 г. 14:11, спустя 16 минут 56 секунд

    согласен так будет работать но мне надо было именно так

    "SELECT `id`, `parent`, `alias` FROM {site_content} WHERE `id` in (?a;);"
  • alexxx

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 16 ноября 2009 г. 1:16, спустя 2 дня 11 часов 4 минуты

    понимаю что не в тему
    но есть вопрос разбираюсь с исключениями как перехватить исключения типа E_PARSER
    приведу пример

    файл index.php

    <?php
    class MyException extends Exception {
    public function __construct($message, $errorLevel = 0, $errorFile = '', $errorLine = 0) {
    parent::__construct($message, $errorLevel);
    $this->file = $errorFile;
    $this->line = $errorLine;
    }
    }
    set_error_handler(create_function('$c, $m, $f, $l', 'throw new MyException($m, $c, $f, $l);'), E_ALL);
    try
    {
    include "echo.php";
    }
    catch (MyException $e) {echo $e->getCode();}
    ?>


    файл echo.php

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


    в файле echo специально пропускаем ;

    при этом ошибка не перехватывается в чем проблема
    и вообще возможно ли отловить такие ошибки
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 16 ноября 2009 г. 1:25, спустя 9 минут 1 секунду

    А зачем ловить такие ошибки, вместо того, чтоб их исправить?
  • alexxx

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 16 ноября 2009 г. 2:22, спустя 57 минут 23 секунды

    нативный шаблонизатор
    вот поэтому и ловить надо
    если в шаблоне ошибка необходимо показывать свою страницу ошибок
    а не стандартное сообщение Parse error:parse error,…
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 16 ноября 2009 г. 8:52, спустя 6 часов 30 минут

    По-моему если файл подключать не require, а include, то глобально сценарий вываливаться не будет, будет только сообщение об ошибке в этом файле, которое можно разобрать. хотя не уверен.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 16 ноября 2009 г. 9:09, спустя 16 минут 46 секунд

    The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.

    If errors occur before the script is executed (e.g. on file uploads) the custom error handler cannot be called since it is not registered at that time.


    http://php.net/manual/en/function.set-error-handler.php

    насколько я понимаю, то ошибки можно перехватить по своему если они произошли не в файле которые вызывает set_error_handler.

    в остальных случаях нельзя что и понятно :)

    Сапожник без сапог
  • alexxx

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 17 ноября 2009 г. 14:00, спустя 1 день 4 часа 51 минуту

    Думаю стоит продолжить тут http://pyha.ru/forum/topic/3393.30 как раз в тему будет
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 20 ноября 2009 г. 13:08, спустя 2 дня 18 часов 57 минут

    Вот у меня такой запросец сейчас получился:

    SELECT
    m.id AS id, title_eng AS title, short_description AS info,
    region_id, country_id, r.title AS region, c.title AS country, s.title AS stars, s.sorder,
    (SELECT file_name FROM `tt_tourism_hotels_gallery` WHERE hotel_id=m.id ORDER BY sorder LIMIT 0,1) AS pic
    FROM `tt_tourism_hotels` AS m
    LEFT JOIN `tt_tourism_regions` r ON region_id=r.id
    LEFT JOIN `tt_tourism_countries` c ON country_id=c.id
    LEFT JOIN `tt_tourism_hotels_stars` s ON stars=s.id
    WHERE 1=1
    AND country_id=1
    AND region_id=2
    AND s.id IN (SELECT id FROM `tt_tourism_hotels_stars` WHERE sorder>=(SELECT sorder FROM `tt_tourism_hotels_stars` WHERE id=2))
    AND m.id IN (
    SELECT hotel_id
    FROM tt_tourism_hotels_hotel2lodging
    LEFT JOIN tt_tourism_hotels_lodging l ON lodging_id=l.id
    WHERE sorder > (
    SELECT sorder
    FROM tt_tourism_hotels_lodging AS ll
    WHERE ll.id=5
    )
    )

    и будет он только расти.

    Что я думаю: что все время писать ?t и в конце там складировать названия таблиц как-то не совсем удобно. Какие будут предложения?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 20 ноября 2009 г. 15:37, спустя 2 часа 28 минут 20 секунд

    Абырвалг, я никогда не использую ?t
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 20 ноября 2009 г. 16:19, спустя 42 минуты 33 секунды

    если таблицы без префиксов, то в принципе ?t не сильно и нужен, разве что у нас есть какой-то класс (класс модуля?) в котором через константы объявлены названия таблиц.

    <?
    // ну, что б не писать
    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();

Пожалуйста, авторизуйтесь, чтобы написать комментарий!