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

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

  • tenzor

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

    Spritz 11 марта 2009 г. 11:36, спустя 1 день 6 часов 32 минуты

    3. ещё маленький глючок.

    а это где?
  • vasa_c

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

    Spritz 11 марта 2009 г. 11:41, спустя 5 минут 5 секунд

    в 267 строке - self::$baseName
  • tenzor

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

    Spritz 12 марта 2009 г. 13:36, спустя 1 день 1 час 55 минут

    и еще такой момент.
    В отладочную функцию предлагаю передавать время выполнения запроса :) Ну, для отладки.
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 6 мая 2009 г. 2:29, спустя 54 дня 12 часов 53 минуты

    У меня такой вопрос(сейчас понимаю в меня полетят палки и ссылания на то что ламер =) ):
    вот собсно функция:

    function addRec($arr)

           $sql = "INSERT INTO catalog(?a;) VALUES(?a;)";
           $this->query($sql,array(array_keys($arr),array_values($arr)));
       }

    И соответственно ошибка выполнения sql скрипта:


    Fatal error: Uncaught DB Error. Query="INSERT INTO catalog("name","parent") VALUES("test3\'ds:d","0")" error = 1064 "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"name","parent") VALUES("test3\'ds:d","0")' at line 1"

    Я понимаю что ошибка из-за двойных кавчек, я конечно могу дописать ф-ю которая будет все " на ' заменять, но вопрос почему именно двойные кавычки?
  • vasa_c

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

    Spritz 6 мая 2009 г. 2:48, спустя 18 минут 59 секунд

    ?a предназначен для вставки данных (они в кавычки и заключаются).
    Вы же пытаетесь использовать его для вставки списка столбцов.

    В вашем случае, если $arr имеет формат "столбец"=>"значение" будет удобным использование ?s:
    $pattern = 'INSERT INTO `catalog` SET ?s';
    $data = Array($arr);
    $this->query($pattern, $data);
  • md5

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

    Spritz 6 мая 2009 г. 3:15, спустя 26 минут 30 секунд

    а зачем там точка с запятой после ?a ?
    все умрут, а я изумруд
  • adw0rd

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

    Spritz 6 мая 2009 г. 3:24, спустя 9 минут 13 секунд

    md5, типа есть такая возможность, для введения однозначности… но это условие не обязательно
    Почитай в самом низу http://pyha.ru/go/godb/query/
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • md5

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

    Spritz 6 мая 2009 г. 4:19, спустя 54 минуты 56 секунд

    ух, как все неоднозначно!
    все умрут, а я изумруд
  • Trent

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

    Spritz 16 сентября 2009 г. 0:22, спустя 132 дня 20 часов 3 минуты

    Запихиваю в бд serialized строку. Однако, в бд записывается что-то вроде
    a:1:`i:0;d:1;`

    Откуда "`"? Это goDB или что-то еще?

    PS

    Вывод запроса до записи в базу выдает нормальную строку.
  • vasa_c

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

    Spritz 16 сентября 2009 г. 2:52, спустя 2 часа 29 минут 30 секунд

    Как записываете? Как выводите? Как проверяете?
  • Trent

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

    Spritz 16 сентября 2009 г. 2:56, спустя 4 минуты 15 секунд

    Все, разобрался. В этот раз забыл про плейсхолдеры, а goDB, оказывается, заменяет скобки =)
  • alexxx

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

    Spritz 12 ноября 2009 г. 10:50, спустя 57 дней 8 часов 53 минуты

    Ничего понять не могу проблема такая

    Вот такой запрос 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

    Вот такая ерунда.

  • vasa_c

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

    Spritz 12 ноября 2009 г. 11:17, спустя 26 минут 44 секунды

    Попробуйте в скрипте указать нужную кодировку $db->set_charset.
  • alexxx

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

    Spritz 12 ноября 2009 г. 11:59, спустя 41 минуту 50 секунд

    		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"');
    и запрос проходит без ошибок
  • vasa_c

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

    Spritz 12 ноября 2009 г. 12:04, спустя 5 минут 9 секунд

    У меня есть сомнения, что проблема именно в библиотеке.
    Запрос формируется верно.
    Illegal mix of collations — проблема в кодировках.
    В майадмине всё нормально, в сценарии нет — видимо в майадмине одни настройки при подключении, у вас другие.

    Какой "collation" ("сравнение") в майадмине для `alias` показывается? Случаем не latin какой-нибудь?
    Спустя 250 сек.
    Странно, в доке написано:
    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).

    У вас какая версия?

    Как говорится, раз работает — не трогайте :)

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