Author |
Message |
Владимир Хоменко
Участник форума

Joined: 11 Jun 2004
Posts: 427
Карма: 42 поощрить/наказать
Location: Николаев, Украина
|
Posted: Thu Jan 18, 2007 7:46 pm (написано за 39 секунд)
Post subject:
|
|
Дмитрий Котеров wrote: |
Вообще, у меня есть такое убеждение, что необходимость получения метаданных базы свидетельствует об ошибке в архитектуре системы. | Если это только не PMA (-; Off: Дмитрий, у Вас что-то с кармой случилось
|
|
Back to top |
|
 |
Юрий Насретдинов
Модератор

Joined: 13 Mar 2003
Posts: 8642
Карма: 197 поощрить/наказать
Location: 007 495
|
Posted: Thu Jan 18, 2007 8:51 pm (спустя 1 час 4 минуты; написано за 45 секунд)
Post subject:
|
|
Владимир Хоменко wrote: |
что-то с кармой случилось | Это, вероятно, противоборство двух скриптов: тех горе-ламеров, которые флудят скрипт понижения кармы, и модераторов данного форума, которые флудят тот же скрипт, только в сторону повышения )
|
|
Back to top |
|
 |
Гриша
Заглянувший
Joined: 26 Oct 2006
Posts: 12
Карма: 0 поощрить/наказать
|
Posted: Fri Jan 19, 2007 8:09 pm (спустя 23 часа 18 минут; написано за 7 минут 27 секунд)
Post subject: кэш? или не кэш?
|
|
Ковыряюсь со скриптом, приводить код не буду, но обновление делается этой конструкциейТак вот загадка!
Если массив $form_input не изменялся, то повторно не обновляет, выдаёт ошибку, $DB->query('UPDATE ?_goods SET ?a WHERE id=?', $form_input, $id) возвращает ложь а если изменить в той же форме хоть букву - обновляет! но опять же, только один раз В логи сервера ничего не пишется, рекомендованный отладчикничего не показывает,тоже ничего не показывает... По шагам. 1. Открываю в Опере форму, заполняю, сабмичу - ОК!, обновлено. 2. Нажимаю кнопку "назад", по идее получая в точности ту же форму с теми же значениями (Опера!) 3. Сабмичу - УПС! обламываюсь 4. Нажимаю кнопку "назад", изменяю данные (хоть один символ в любом поле) 5. Сабмичу - ОК! опять работает! 6. GOTO 2 и т.д. форма генерируется динамически, но это не важно, думаю. Никакое кэширование принудительно не включал. Что бы это могло быть?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sat Jan 20, 2007 1:52 pm (спустя 17 часов 43 минуты; написано за 1 минуту 27 секунд)
Post subject:
|
|
Вы уверены, что дело вообще в библиотеке? Используйте print_r, чтобы посмотреть, что реально обрабатывается на сервере. Я оцениваю вероятность того, что проблема в DbSimple, как крайне низкую. Скорее всего, баг где-то уровнем выше.
|
|
Back to top |
|
 |
Гриша
Заглянувший
Joined: 26 Oct 2006
Posts: 12
Карма: 0 поощрить/наказать
|
Posted: Sat Jan 20, 2007 3:32 pm (спустя 1 час 39 минут; написано за 1 минуту 38 секунд)
Post subject:
|
|
Дмитрий Котеров wrote: |
Вы уверены, что дело вообще в библиотеке? Используйте print_r, чтобы посмотреть, что реально обрабатывается на сервере. | Нет, пока не уверен. Пока что это просто какая-то мистика. :) Я попробовал массив не принимать из формы, а объявит в скрипте - то же самое! Вот скрипт целиком: Code (php): | скопировать код в буфер обмена | $id=1;
$form_input = array (www.php.net/array)( 'name' => "товар2", 'specification' => "ssagf", 'description' => "пппgв", 'price' => 2, 'weight' => 0, 'priority' => 1, 'is_new' => "нет" );
if ($DB->query('UPDATE ?_goods SET ?a WHERE id=?', $form_input, $id)) { print (www.php.net/print) "ОК"; } else { print (www.php.net/print) "ошибка"; } | При первом запуске после изменения хоть одного элемента массива вручную пишет ОК, при всех остальных - ошибка. Потом опять добавляю буковку в какой-нибудь элемент - ОК! Как я уже сказал, рекомендованный логгер почему то ничего связанного с этим запросом не выводит, вне зависимости от удачности или неудачности обновления данных, хотя прекрасно выводит два следующих за ним СЕЛЕКТа. Обработчик ошибок $DB->setErrorHandler прицеплен, и срабатывает если в запросе настоящая ошибка, но тут молчит... Посоветуйте, к чему подцепить print_r чтобы "посмотреть, что реально обрабатывается на сервере". Сам массив уже выводил - массив как массив... :) Индекс в таблице ?_goods пока один - тот самый id... В случае успешного обновления строка действительно замещается... мистика...
|
|
Back to top |
|
 |
Гриша
Заглянувший
Joined: 26 Oct 2006
Posts: 12
Карма: 0 поощрить/наказать
|
Posted: Sat Jan 20, 2007 3:45 pm (спустя 13 минут; написано за 1 минуту 16 секунд)
Post subject:
|
|
Возникла идея - может это как-то связано в результатом, возвращаемом MySQL при полном совпадении обновляемой строки? Как проверить? MySQL вроде 3.23.49... Сейчас буду копать...
|
|
Back to top |
|
 |
Гриша
Заглянувший
Joined: 26 Oct 2006
Posts: 12
Карма: 0 поощрить/наказать
|
Posted: Sat Jan 20, 2007 6:37 pm (спустя 2 часа 52 минуты; написано за 3 минуты 23 секунды)
Post subject:
|
|
Новые данные. mysql_info() выдаёт: "Rows matched: 1 Changed: 0 Warnings: 1" Как посмотреть это "Warning"? MySQL у меня всё-таки 4.1.16-max, а 3.23.49 я взял из PHPINFO, а это был какой-то MySQL API... В общем, интуитивно чувствую, что MySQL просто не хочет обновлять строку на полностью идентичную. Не ожидал. В принципе, ничего страшного, строка в таблице нужная есть. Но встаёт вопрос, как обрабатывать ошибки? Как убедится что $DB->query('UPDATE ?_goods SET ?a WHERE id=?', $form_input, $id) вернул предупреждение, а не ошибку?
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Sun Jan 21, 2007 5:48 am (спустя 11 часов 10 минут; написано за 5 минут 41 секунду)
Post subject:
|
|
Кстати, господа, я так и не понял... DbSimple работает с SQLite или нет? В форуме где-то пролетало что вроде как работает, для этого используется PDO. Но ни в документации, ни в исходниках ничего по этому поводу не нашел. Проясните пожалуйста ситуацию.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sun Jan 21, 2007 8:35 pm (спустя 14 часов 46 минут; написано за 2 минуты 3 секунды)
Post subject:
|
|
Гриша wrote: |
Возникла идея - может это как-то связано в результатом, возвращаемом MySQL при полном совпадении обновляемой строки? | Да, именно. MySQL возвращает число ФАКТИЧЕСКИ измененных строк, а оно в Вашем случае - 0. Делайте так: Code (php): | скопировать код в буфер обмена | if (null !== $DB->query('UPDATE ?_goods SET ?a WHERE id=?', $form_input, $id)) { print (www.php.net/print) "ОК"; } else { print (www.php.net/print) "ошибка"; } | Обязательно именно !==, а не !=, чтобы проверялся еще и тип (0 !== null, но null == 0). Гость wrote: |
DbSimple работает с SQLite или нет? | Пока нет. Надо делать поддержку PDO, а она еще не готова. Сейчас поддерживаются только MySQL, PgSQL, FireBird.
|
|
Back to top |
|
 |
Satyrius
Участник форума

Joined: 28 Mar 2006
Posts: 110
Карма: 2 поощрить/наказать
Location: Москва
|
Posted: Thu Jan 25, 2007 11:53 am (спустя 3 дня 15 часов 18 минут; написано за 31 секунду)
Post subject:
|
|
Дмитрий, а планируется поддержка MSSQL?
|
|
Back to top |
|
 |
Константин Жинько [tIT]
Сотрудник «Лаборатории»

Joined: 12 Jun 2004
Posts: 2264
Карма: 106 поощрить/наказать
Location: Москва
|
Posted: Thu Jan 25, 2007 4:30 pm (спустя 4 часа 36 минут; написано за 21 секунду)
Post subject:
|
|
Satyrius
А надо?
|
|
Back to top |
|
 |
Satyrius
Участник форума

Joined: 28 Mar 2006
Posts: 110
Карма: 2 поощрить/наказать
Location: Москва
|
Posted: Fri Jan 26, 2007 12:18 pm (спустя 19 часов 47 минут; написано за 3 минуты 45 секунд)
Post subject:
|
|
Константин Жинько [tIT]
Очень бы хотелось. У нас на работе практически все проекты используют MSSQL (так уж исторически сложилось). До этого (когда с MySQL работал) постоянно пользовался DBSimple. А вот сейчес лишен такой радости. Думаю не только мне приходится работать с MSSQL, да к тому же поддкржка этой СУБД поднимет рейтинг библиотеки.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Jan 31, 2007 12:27 am (спустя 4 дня 12 часов 9 минут)
Post subject:
|
|
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Mon Feb 05, 2007 12:36 am (спустя 5 дней 8 минут)
Post subject:
|
|
|
|
Back to top |
|
 |
slmark
Участник форума

Joined: 09 Aug 2006
Posts: 20
Карма: 0 поощрить/наказать
Location: Минск, Беларусь
|
Posted: Thu Feb 22, 2007 9:55 am (спустя 17 дней 9 часов 19 минут; написано за 1 минуту 13 секунд)
Post subject:
|
|
Здравствуйте. Столкнулся соследующей проблемой. Скрипт Code (php): | скопировать код в буфер обмена | if (!@$DB->query('INSERT INTO ?_users SET username=?', $name)) { echo (www.php.net/echo) 'Такой пользователь уже существует, попробуйте другое имя'; } | Работает некорректно, в любом случае выдается сообщение "Такой пользователь уже существует, попробуйте другое имя". Подскажите, в чем проблема. Спасибо.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Feb 22, 2007 12:55 pm (спустя 2 часа 59 минут; написано за 32 секунды)
Post subject:
|
|
1. Какая база? 2. Попробуйте var_dump($DB->query('INSERT INTO ?_users SET username=?', $name)) и без собаки (может, там ошибка какая-то).
|
|
Back to top |
|
 |
Struchalin
Заглянувший
Joined: 17 Nov 2005
Posts: 17
Карма: 2 поощрить/наказать
|
Posted: Thu Feb 22, 2007 4:09 pm (спустя 3 часа 14 минут; написано за 1 минуту 42 секунды)
Post subject:
|
|
slmark wrote: |
Здравствуйте. Столкнулся соследующей проблемой. Скрипт Code (php): | скопировать код в буфер обмена | if (!@$DB->query('INSERT INTO ?_users SET username=?', $name)) { echo (www.php.net/echo) 'Такой пользователь уже существует, попробуйте другое имя'; } | Работает некорректно, в любом случае выдается сообщение "Такой пользователь уже существует, попробуйте другое имя". Подскажите, в чем проблема. Спасибо. | Может просто не определена константа TABLE_PREFIX...
|
|
Back to top |
|
 |
slmark
Участник форума

Joined: 09 Aug 2006
Posts: 20
Карма: 0 поощрить/наказать
Location: Минск, Беларусь
|
Posted: Thu Feb 22, 2007 4:45 pm (спустя 35 минут; написано за 1 минуту 45 секунд)
Post subject:
|
|
Дмитрий Котеров wrote: |
1. Какая база? | -> MySQL Дмитрий Котеров wrote: |
2. Попробуйте var_dump($DB->query('INSERT INTO ?_users SET username=?', $name)) и без собаки (может, там ошибка какая-то). | -> int(0) А запись в базу успешно добавлена.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Fri Feb 23, 2007 2:37 am (спустя 9 часов 52 минуты; написано за 42 секунды)
Post subject:
|
|
Версия библиотеки точно самая последняя? В одной из старых как раз был баг с INSERT-ами...
|
|
Back to top |
|
 |
slmark
Участник форума

Joined: 09 Aug 2006
Posts: 20
Карма: 0 поощрить/наказать
Location: Минск, Беларусь
|
Posted: Fri Feb 23, 2007 9:42 am (спустя 7 часов 4 минуты; написано за 1 минуту 49 секунд)
Post subject:
|
|
Скачал последнюю версию с сайта - не помогло. Сейчас (как альтернатива) empty($DB->error), но хотелось бы разобраться, почему не работаетвариант выше ... Спасибо з.ы.: Всех с 23 февраля! :)
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed Feb 28, 2007 12:19 am (спустя 4 дня 14 часов 37 минут; написано за 3 минуты 3 секунды)
Post subject:
|
|
Библиотека очень классная! Нашел одну вещь в описании, в примере использования ошибок и исключений Code (php): | скопировать код в буфер обмена | // Обратите внимание на "@"! if (!@$DB->query('UPDATE tbl SET field=? WHERE id=1', $field)) { // Здесь идет реакция на ошибку, если она возникла. // Контекст ошибки можно получить через $DB->error. $DB->query('INSERT INTO tbl(id, field) VALUES(1, ?)', $field) } | в данном случае, если при редактировании не изменяются никакие данные, то происходит вставка еще одной строки (если разумеется нету уникальных индексов при вставке) из-за того, что изменений не происходит и query возвращает 0 наверное стоит обратить на это внимание в документации
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Feb 28, 2007 1:20 am (спустя 1 час 48 секунд; написано за 1 минуту 20 секунд)
Post subject:
|
|
М-да, это большой облом, на самом деле. Значит, надо делать вначале INSERT (при условии наличия уникального индекса по id), а если он не прошел, тогда UPDATE. Сейчас подправлю доку.
|
|
Back to top |
|
 |
Nadir
Guest
Карма: 388 поощрить/наказать
|
Posted: Thu Mar 01, 2007 7:38 am (спустя 1 день 6 часов 18 минут; написано за 1 минуту 8 секунд)
Post subject: Монстрообразные конструктиции
|
|
Добрый день! Может есть у кого решение как обходить подобные монстрообразные конструкции и повысить читабельность кода Code (php): | скопировать код в буфер обмена | $_id = $DbManager->selectcell( "SELECT " . " txt.?# AS ?# " . "FROM " . " ?# txt " . " INNER JOIN ?# nt ON ( nt.?# = txt.?# ) " . "WHERE " . " nt.?# < txt.?# " . " AND ?# IN (?a) " . "ORDER BY " . " nt.?# ASC " . "LIMIT 1", 'id', 'id', 'questid', 'id', 'hits', 'weight', 'id', $_banned, 'hits', GRANAT_TEXT_VOTE_TABLE, GRANAT_INT_VOTE_TABLE ); |
|
|
Back to top |
|
 |
Константин Жинько [tIT]
Сотрудник «Лаборатории»

Joined: 12 Jun 2004
Posts: 2264
Карма: 106 поощрить/наказать
Location: Москва
|
Posted: Thu Mar 01, 2007 1:27 pm (спустя 5 часов 48 минут; написано за 4 минуты 30 секунд)
Post subject:
|
|
Nadir wrote: |
Code (php): | скопировать код в буфер обмена | $_id = $DbManager->selectcell(' SELECT txt.id FROM questid txt INNER JOIN id nt ON nt.hits = txt.weight WHERE nt.id < txt.?# AND hits IN (?a) ORDER BY nt.?# ASC LIMIT 1 ', $_banned, GRANAT_TEXT_VOTE_TABLE, GRANAT_INT_VOTE_TABLE ); | | Как-то так.
|
|
Back to top |
|
 |
WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268 поощрить/наказать
Location: Питер
|
Posted: Thu Mar 01, 2007 2:39 pm (спустя 1 час 12 минут; написано за 1 минуту 35 секунд)
Post subject:
|
|
Я предпочитаю такой стиль: Code (php): | скопировать код в буфер обмена | $_id = $DbManager->selectcell( 'SELECT txt.id FROM questid txt INNER JOIN id nt ON nt.hits = txt.weight WHERE nt.id < txt.?# AND hits IN (?a) ORDER BY nt.?# ASC LIMIT 1' ,$_banned, ,GRANAT_TEXT_VOTE_TABLE ,GRANAT_INT_VOTE_TABLE ); |
|
|
Back to top |
|
 |
Никита Косолaпов
Участник форума

Joined: 08 Aug 2006
Posts: 172
Карма: 9 поощрить/наказать
Location: Москва
|
Posted: Mon Mar 05, 2007 5:40 pm (спустя 4 дня 3 часа 7 секунд; написано за 20 минут 41 секунду)
Post subject: DbSimple & SELECT со сложным WHERE
|
|
Здравствуйте, уважаемые! Возникла у меня такая проблема: необходимость формирования SQL-запросов вида: Code (SQL): | скопировать код в буфер обмена | SELECT field1, field2 FROM TABLE WHERE id=1 AND pid=2 AND gett=3 SELECT field1, field2 FROM TABLE WHERE id=1 AND gett=3 SELECT field1, field2 FROM TABLE WHERE pid=2 AND gett=3 | то есть запросы разнятся только количеством условий в WHERE. Есть ли возможность все эти запросы сделать через ОДИН шаблон в DbSimple? т.е. Code (php): | скопировать код в буфер обмена | switch($sw){ case 1: $where = array (www.php.net/array)('id' => 1, 'pid' => 2, 'gett' => 3,); break; case 2: $where = array (www.php.net/array)('id' => 1, 'gett' => 3,); break; case 3: $where = array (www.php.net/array)('pid' => 2, 'gett' => 3,); break; } $rows = $DB->select(' SELECT field1, field2 FROM table WHERE ?w ', $where); | Основная проблема в том, что у меня нет поля, присутствующего во всех запросах, которое можно было бы поставить впереди всех, как в такой конструкции... Code (php): | скопировать код в буфер обмена | switch($sw){ case 1: $where = array (www.php.net/array)('id' => 1, 'pid' => 2, 'gett' => 3,); break; case 2: $where = array (www.php.net/array)('id' => 1, 'pid' => 2,); break; case 3: $where = array (www.php.net/array)('id' => 1, 'gett' => 3,); break; } $rows = $DB->select(' SELECT * FROM goods WHERE id = ? { AND pid = ? } { AND gett = ? } ', $where['id'], (empty (www.php.net/empty)($where['pid'])? DBSIMPLE_SKIP : $where['pid']), (empty (www.php.net/empty)($where['gett'])? DBSIMPLE_SKIP : $where['gett']), ); | Впрочем, можно воспользоваться Code (php): | скопировать код в буфер обмена | $rows = $DB->select(' SELECT * FROM goods WHERE 1 = 1 { AND id = ? } { AND pid = ? } { AND gett = ? } ', (empty (www.php.net/empty)($where['id'])? DBSIMPLE_SKIP : $where['id']), (empty (www.php.net/empty)($where['pid'])? DBSIMPLE_SKIP : $where['pid']), (empty (www.php.net/empty)($where['gett'])? DBSIMPLE_SKIP : $where['gett']), ); | но так не очень удобно - лишний код...
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Tue Mar 06, 2007 1:51 am (спустя 8 часов 11 минут; написано за 1 минуту 6 секунд)
Post subject:
|
|
Никита Косолaпов wrote: |
$rows = $DB->select(' SELECT * FROM goods WHERE 1 = 1 { AND id = ? } { AND pid = ? } { AND gett = ? } ', (empty($where['id'])? DBSIMPLE_SKIP : $where['id']), (empty($where['pid'])? DBSIMPLE_SKIP : $where['pid']), (empty($where['gett'])? DBSIMPLE_SKIP : $where['gett']), ); | Это лучший вариант - вставка "1=1" в AND-условия (или "1=0" в OR-условия), чтобы следующий макроблок, начинающийся с AND, не вызывал синтаксическую ошибку. Более того, этот трюк приведен и в примерах статьи. К тому же это весьма читабельно - где Вы видите лишний код?
|
|
Back to top |
|
 |
Никита Косолaпов
Участник форума

Joined: 08 Aug 2006
Posts: 172
Карма: 9 поощрить/наказать
Location: Москва
|
Posted: Tue Mar 06, 2007 12:15 pm (спустя 10 часов 24 минуты; написано за 6 минут 32 секунды)
Post subject:
|
|
Сравнитеи Code (php): | скопировать код в буфер обмена | $rows = $DB->select(' SELECT * FROM goods WHERE 1 = 1 { AND id = ? } { AND pid = ? } { AND gett = ? } ', (empty (www.php.net/empty)($where['id'])? DBSIMPLE_SKIP : $where['id']), (empty (www.php.net/empty)($where['pid'])? DBSIMPLE_SKIP : $where['pid']), (empty (www.php.net/empty)($where['gett'])? DBSIMPLE_SKIP : $where['gett']), ); | К тому же - если у меня общее количество полей, используемых в WHERE - десятка два-три, а в каждом варианте запроса используется от силы три-четыре поля? И почему плейсхолдер ?a - разворачивающий ассоциативный массив в строку '`key1`="val1", `key2`="val2", `key3`="val3"' - существовать может, а плейсхолдеры, разворачивающие тот же ассоциативный массив в строку '`key1`="val1" AND `key2`="val2" AND `key3`="val3"' или '`key1`="val1" OR `key2`="val2" OR `key3`="val3"' - не существуют?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Tue Mar 06, 2007 5:56 pm (спустя 5 часов 41 минуту; написано за 3 минуты 13 секунд)
Post subject:
|
|
Потому что: 1. AND или OR - как определить? 2. Почему именно =? Почему не LIKE или <=? 3. Второй вариант запроса более читабельный - сразу видно, во что он может потенциально развернуться. Короче говоря, хотите, чтобы массив преобразовывался в серию AND-ов - напишите функцию для этого и конкатенируйте ее с WHERE. Это не задача библиотеки по любому. Более того, когда вы напишете эту функцию, вы с удивлением обнаружите, что в нее надо добавить также поддержку разных других операторов помимо "=", например: <=, IN(), NOT IN() и т.д. И получится у Вас уже целый фреймворк для динамического построения WHERE-условий (а в совокупности с функциями для построения еще и списка SELECT-колонок получите инструмент, похожий на ORM).
|
|
Back to top |
|
 |
Никита Косолaпов
Участник форума

Joined: 08 Aug 2006
Posts: 172
Карма: 9 поощрить/наказать
Location: Москва
|
Posted: Tue Mar 06, 2007 6:15 pm (спустя 18 минут; написано за 14 секунд)
Post subject:
|
|
понял. Был не прав :)
|
|
Back to top |
|
 |
Гриша
Заглянувший
Joined: 26 Oct 2006
Posts: 12
Карма: 0 поощрить/наказать
|
Posted: Wed Mar 21, 2007 3:22 pm (спустя 14 дней 21 час 6 минут; написано за 8 минут 10 секунд)
Post subject:
|
|
Добрый день. Перешёл я тут на PHP5 и обновил денвер на последнюю пятую базу :) Базы сайтов я через INSERT не переносил, просто скопировал папку MySQL/DATA (или как там она) теперь при запуске ранее работавшего скрипта запросе выдаёт такую штуку SELECT id AS ARRAY_KEY, field FROM table WHERE name LIKE '%имя%' -- error #1267: Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation 'like' at ... line 28 простое гугление дало такой результат: ru-mambo.ru/content/view/780/25/
там для Мамбы написано добавить строчку $this->_cursor = mysql_query( "set names 'cp1251';", $this->_resource ); А русский вывод идёт весь из ????, хотя в бд на всех таблицах стоит cp1251_general_ci, и всё русское нормально в ней видно через phpMyAdmin и прочие менеджеры. Но в настройках сервера через phpMyAdmin видно: character set system: utf8 - может в этом дело? что можно сделать для DBSimple или с Денвером? PHP Version 5.1.6 MySQL 4.1.16-max
|
|
Back to top |
|
 |
Гриша
Заглянувший
Joined: 26 Oct 2006
Posts: 12
Карма: 0 поощрить/наказать
|
Posted: Wed Mar 21, 2007 3:59 pm (спустя 36 минут; написано за 2 минуты 26 секунд)
Post subject:
|
|
Временный ответ нашёл в соседней ветке - forum.dklab.ru/viewtopic.php?p=131803#131803
Приведённые там варианты действительно помогают, но поставленный Юpием Насрeтдиновым вопрос остаётся. Отправлять запрос вручную неинтересно :) Может можно встроить что нибудь типа character set system = character set database
|
|
Back to top |
|
 |
Игорь Добрый
Guest
Карма: 388 поощрить/наказать
|
Posted: Thu Mar 22, 2007 9:32 am (спустя 17 часов 32 минуты; написано за 2 минуты 44 секунды)
Post subject: Пустой пароль
|
|
Доброе утро, всем! Дмитрий, при указании в DSN пустого пароля, в скрипте происходит генерация Notice по поводу отсутствия элемента массива $p['pass'] (файл Mysql.php) - нужно учитывать, что пароль может быть пустым.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Fri Mar 23, 2007 7:12 pm (спустя 1 день 9 часов 40 минут; написано за 31 секунду)
Post subject:
|
|
Поставьте двоеточие после логина, не указывая пароль. А еще лучше - опубликуйте здесь патч, решающий проблему.
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Mon Mar 26, 2007 4:41 pm (спустя 2 дня 21 час 28 минут; написано за 9 минут 48 секунд)
Post subject:
|
|
Code (php): | скопировать код в буфер обмена | (empty (www.php.net/empty)($where['id'])? DBSIMPLE_SKIP : $where['id']), (empty (www.php.net/empty)($where['pid'])? DBSIMPLE_SKIP : $where['pid']), (empty (www.php.net/empty)($where['gett'])? DBSIMPLE_SKIP : $where['gett']), ); | может написать так Code (php): | скопировать код в буфер обмена | function dbw($val) { return (empty (www.php.net/empty)($val) ? DBSIMPLE_SKIP : $val); }
// dbw($where['id']), dbw(where['pid']), dbw(where['gett'])); // | ???
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Tue Mar 27, 2007 11:48 pm (спустя 1 день 7 часов 7 минут)
Post subject:
|
|
|
|
Back to top |
|
 |
Антон Макаренко
Участник форума

Joined: 05 Feb 2004
Posts: 374
Карма: 36 поощрить/наказать
Location: Киев
|
Posted: Thu Mar 29, 2007 4:23 pm (спустя 1 день 16 часов 35 минут; написано за 6 минут 40 секунд)
Post subject:
|
|
При запросе не очищается контекст ошибки после предыдущих. Code (php): | скопировать код в буфер обмена | // ... $DB->select('DESCRIBE ?#', 'test'); /* запрос отработал, вернул ошибку контекст ошибки записался $DB->errmsg, $DB->error */ // ... $DB->query('REPLACE INTO some_table SET ?a', $row); /* Этот запрос отработал нормально, вернул количество затронутых строк Однако, как показывает дебаг, контекст ошибки остался еще от прошлого запроса */ | Возможно, это касается определенной последовательности запросов, поэтому приведу лог в моем случае. Code (SQL): | скопировать код в буфер обмена | DESCRIBE `test` -- error #1146: Table 'ait_common_web.test' doesn't exist at ... __meta.php line 136 -- 3 ms; returned '' SELECT f.field_id AS ARRAY_KEY, f.* FROM meta_fields f WHERE f.table_id<>11 -- 1 ms; returned 39 row(s) REPLACE INTO meta_vocabularies SET `field_id`='44', `field_id_pk`='28', `field_id_options`='29' -- 16 ms; returned '2' | Делаю проверку контекста ошибки после запроса REPLACE INTO, а возвращается еще старый от DESCRIBE.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Mar 29, 2007 11:22 pm (спустя 6 часов 58 минут; написано за 4 секунды)
Post subject:
|
|
Антон Макаренко wrote: |
Делаю проверку контекста ошибки после запроса REPLACE INTO | Как именно?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Mar 29, 2007 11:31 pm (спустя 8 минут; написано за 32 секунды)
Post subject:
|
|
На самом деле, и правда, есть такая проблема. Я закоммитил в svn и выложил на dklab исправление, попробуйте его, пожалуйста.
|
|
Back to top |
|
 |
Антон Макаренко
Участник форума

Joined: 05 Feb 2004
Posts: 374
Карма: 36 поощрить/наказать
Location: Киев
|
Posted: Fri Mar 30, 2007 9:36 am (спустя 10 часов 5 минут; написано за 3 минуты 16 секунд)
Post subject:
|
|
Спасибо, исправление помогло. Проверяю я по errmsg:Расчитывая на то, что перед запросом $DB->errmsg присваивается NULL.
|
|
Back to top |
|
 |
|