![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| dimes |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 20.7.2004 Где: то около СПБ Репутация: нет Всего: 14 |
Есть таблица:
В ней всего одна запись: id=100 Делаю:
до этого на всех других серверах возращалось кол-во измененных строк а не найденных строк да и в документации так же написанно с prepare тестил тоже в чем проблемма и как её решить я не нашел Версия модуля: 1.48 mysql: Ver 14.7 Distrib 4.1.10a, for portbld-freebsd5.4 (i386) Это сообщение отредактировал(а) dimes - 30.7.2005, 10:34 |
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
А запись с Id=10 cуществует?
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| dimes |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 20.7.2004 Где: то около СПБ Репутация: нет Всего: 14 |
|
||||
|
|||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Ну так конечно же она же ищет запись, где Id=10 ( WHERE id=10 ), не находит её и соответственно ничего не изменяет, потому и возвращает 0E0. А так как запись с Id=100 есть, потому она выполняется и возвращается 1.
В логе наверняка написано, что не найдена запись с Id=10 Если тебе нужно получить 0, то просто прибавь его после выполнения запроса:
И старайся значения полей брать в кавычки:
Это сообщение отредактировал(а) korob2001 - 30.7.2005, 13:36 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| dimes |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 20.7.2004 Где: то около СПБ Репутация: нет Всего: 14 |
Ты немного не понял. СУБД после операции возращает сколько кол-во строк была найденно и сколько строк было обновлено. Т.е. в моем случает при запросе "update d_test set id=100 where id=100" должно быть возращено что найдена 1 строка и обновлено 0 строк так как id уже равно 100 и обновлять ничего не нужно. DBI берет одно из этих значений и возращает из do и execute. Так вот я всегда думал да и опыт показывал что DBI возращает сколько строк было реально обновлено ( т.е. данный запрос должен был вернуть 0E0 ) но похоже что возращается сколько было найденно, вот и я пытаюсь понять толи я глубоко ошибался до этого толи я наблюдаю результат набора факторов о которых я ничего не знаю. |
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Всё верно, ты ведь делаешь запрос на обновление а не на выборку данных. Потому и получаешь такой результат. А почему не пользуешься prepare(), мне почему-то кажется такой способ намного удобнее, хотя и длиннее. Но опять же, это дело вкуса.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| sharq |
|
||||||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
dimes
хорошо бы, если бы DBI действовал именно так Находятся все строки, удовлетворяющие запросу (1 строка) и обновляется поле id на значение 100 (1 строка). Поэтому все правильно тебе выдает скрипт.
Читаем документацию по модулю DBI!
Надеюсь, понял.
Метод do обычно используется для не-SELECT запросов, которые необходимо выполнить один раз. Соответственно prepare+execute - для SELECT или запросов, которые необх. выполнять несколько раз. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||||||
|
|||||||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Да это я знаю, просто, на мой взгляд, контролировать prepare гораздо удобнее. Но опять же, наверное, кто как привык. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| dimes |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 20.7.2004 Где: то около СПБ Репутация: нет Всего: 14 |
Видать я действительно до этого заблуждался
|
|||
|
||||
| Lula |
|
|||
|
Unregistered |
Помогите чайнику!!!!
выдает ошибку: Error installing package 'dbi.ppd': Could not locate a PPD file for package dbi.ppd Что делать в этой ситуации? |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Почитай статью в FAQ о том, как устанавливать модули. Там описаны все способы, если не поможет, тогда пиши и пожалуйста опиши свои действия. Очень сложно чем-либо помочь, когда не знаешь версии Perl, OS и способа установки.
Статья здесь: http://forum.vingrad.ru/index.php?act=modu...nel§ion=799 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |