Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UPDATE:mysql_affected_rows возвращает 0, если данные не в БД не изменились 
V
    Опции темы
LOBsTerr
Дата 24.3.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 22.2.2006
Где: Ташкент

Репутация: нет
Всего: нет



Помоему это тема примерно про тоже, но мне к сожалению не помогает дело с правами. если выполняю в Мускуле действительно все проходит нормально, а вот из пхп mysql_affected_rows() - возвращает 0.

Я стал разбираться с этой проблемой и обратил внимание на такую вещь, что если поля не изменились, то есть сохранили те же значения, то mysql_affected_rows() - возвращает 0. А в мускуле соотвественно все нормально.

Беру даже самые простейшие запросы. С правами все нормально, у пользователя стоит grant all Privileges.

Помогите кто знает потому что, я пока не нашел решения. А проблема в том что у меня  другая таблица  содержит ссылку на мою таблицу, в случае обновления я обновляю и ссылку. А т.к. обновление ссылки происходит после, то у меня оно не происходит, т.к. не пропускается условие:
Код

if ( mysql_affected_rows($conn) ) {
         //Обновление ссылки
}

НУ а так как пользователь может не трогать данные а только обновить данные связанные с сылкой, то получается запрос не пройдет. Спасибо заранее всем за помощь

PS - я конечно нашел решение, сравнивать массивы котрый у меня был до и после, и если изменился обновлять, но меня интересует почему mysql_affected_rows() , так странно себя ведет! Или почему mysql_query - не апдейтит значения.

Это сообщение отредактировал(а) LOBsTerr - 24.3.2008, 22:40
PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 24.3.2008, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



фееричный топик.
три совершенно разных вопроса.

Странно она себя ведет только на твой взгляд. На мой взгляд, она ведет себя совершенно логично.
У тебя есть конкретные вопросы, а не абстрактные, типа "почему жизнь так ужасно устроена" или "почему mysql_affected_rows() работает так или иначе"?


PM   Вверх
LOBsTerr
Дата 24.3.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 22.2.2006
Где: Ташкент

Репутация: нет
Всего: нет



Ну фееричный, он на первый взгляд, а вот с практической стороны, работа функции вызвала много вопросов и соотвественно и проблемы с ними. Правильно ли я понимаю, что если значения в запросе не отличаются от тех, что содержаться в таблице, то mysql_affected_rows() вернет 0?

Если да то почему? (Ведь в мускуле все это выполняется нормально)

PS А на счет счет, что жизнь ужасно устроена я и без этого знаю  smile, вот только в мануале данный вопрос не освещен, поэтому и задаю его здесь

PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 24.3.2008, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Цитата(LOBsTerr @  24.3.2008,  22:55 Найти цитируемый пост)
работа функции вызвала много вопросов 

Как ты мог бы заметить, ни к одному из предшествовавших вопросов эта функция не имела никакого отношения. 
Цитата(LOBsTerr @  24.3.2008,  22:55 Найти цитируемый пост)
Правильно ли я понимаю, что если значения в запросе не отличаются от тех, что содержаться в таблице, то mysql_affected_rows() вернет 0?

Правильно.
О чем можно было прочитать в документации.
Это, как я считаю, самый правильный путь - при возникновении проблем с функцией пхп, идти читать документацию по этой функции, а не форум.
Цитата(LOBsTerr @  24.3.2008,  22:55 Найти цитируемый пост)
Если да то почему?

Попробуй себе ответить на вопрос, сколько строк изменилось. Сравни с ответом функции.
Цитата(LOBsTerr @  24.3.2008,  22:55 Найти цитируемый пост)
Ведь в мускуле все это выполняется нормально

ЧТО выполняется в мускуле нормально?

Это сообщение отредактировал(а) Feldmarschall - 24.3.2008, 23:15
PM   Вверх
LOBsTerr
Дата 25.3.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 22.2.2006
Где: Ташкент

Репутация: нет
Всего: нет



2 Feldmarschall - Спасибо, тебе за ответы. Хотелось бы многое тебе сказать, но этот форум не для этого создан, поэтому дам тебе совет, если хочешь помочь людям помогай, а не еще больше их путай (много постороннего ).

Вообщем, теперь подведу резюме. Если при апдейте значения в запросе не отличаются от тех, что хранятся в БД, то функция mysql_affected_rows(), ВСЕГДА будет возвращать 0, не смотря на то, что если Вы будете выполнять это напрямую в БД, через какие нибудь средства типа (mysql query browser  и т.п.) и результат будет в этих средствах не 0, а именно 1 или столько сколько строк было извлечено.

mysql_query () - При апдейте всегда возвращает true, в случае когда апдейт прошел Успешно, и в случае если он не прошел, из-за того, что значения совпадали со значниями в таблице.

Не допускайте моей ошибки, используйте, mysql_affected_rows(), для того что узнать прошел ли апдейт или нет, все таки эта функция создана не для этого а чтобы узнать сколько строк было извлечено.

делайте если, это необходимо все дополнительные проверки до этого.


PM MAIL WWW ICQ   Вверх
skyboy
Дата 25.3.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(LOBsTerr @  25.3.2008,  12:28 Найти цитируемый пост)
а не еще больше их путай (много постороннего )

по-моему, он вполне четко сказал.
во-первых, при проблемах с функциями смотрим документацию.
во-вторых, далеко не всегда логичное с точки зрения человека заключение действительно логично(PHP  ведь работает с бинарной логикой: никаких допущений и ожиданий). 
Цитата(LOBsTerr @  25.3.2008,  12:28 Найти цитируемый пост)
если Вы будете выполнять это напрямую в БД, через какие нибудь средства типа (mysql query browser  и т.п.) и результат будет в этих средствах не 0, а именно 1 или столько сколько строк было извлечено

что, кстати, логично. 
при выполнении запроса во front-end'e у тебя запрос. сложный или простой - не важно.
при работе же через клиент-программу программист не ограничится выполнеинем запроса. будет ещё какая логика. и чтоб не приходилось отдельным запросом выбирать количество реально измененных строк(зачем?), функция(реализованная, кстати, на С - у MySQL родным является С API, а не PHP) возвращает количество тех, что изменились. Если же тебе надо найти количество строк, которые удовлетворяют условию, используй дополнительный SELECT.
Цитата(LOBsTerr @  24.3.2008,  21:33 Найти цитируемый пост)
А проблема в том что у меня  другая таблица  содержит ссылку на мою таблицу, в случае обновления я обновляю и ссылку. А т.к. обновление ссылки происходит после, то у меня оно не происходит, т.к. не пропускается условие:

непонятно.
либо у тебя ссылки и раньше ссылалсь на эту запись и бессмысленно эту ссылку обновлять(данные-то даже не изменились).
либо у тебя ссылка раньше не ссылалась, а теперь должна. тогда зачем делать проверку на affected_rows?

M
skyboy
Тему разделил. В следующий раз, будь добр, убедись что тема, куда ты постишь, действительно об идентичной проблеме!

PM MAIL   Вверх
LOBsTerr
Дата 25.3.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 22.2.2006
Где: Ташкент

Репутация: нет
Всего: нет



2 SkyBoy - Судя по началу темы от которой ты ее отделил, у парня были точно такие признаки. Если не правильно поместил извините. Просто иногда когда пользуешься поиском натыкаешься на море одинаковых по сути дела, тем поэтому не хотелось плодить новую.

Есть две таблицы пользователи users и phone_numbers

Table: users
id - int
name - varchar

Table: phone_numbers
id - int
phone_number - varchar
user_id - int //Ссылка на таблицу юзеров

Форма пользователя содержала:
имя пользователя
Номер телефонов // выбираются из таблицы телефонов

Теперь когда пользователь отправляет данные на сервер, я делаю последовательно два апдейта, но я делал проверку mysql_affected_rows(), но так как у меня проверка не проходила, то телефонные номера не обновлялись. Вот собственно здесь и была проблема вся.

В итоге проанализировав, я понял что после всех проверок можно не обращать внимание, и делать эти 2 апдейта, последовательно не выполняя проверку на mysql_affected_rows().

Спасибо всем за помощь
PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 25.3.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



У первого автора той темы проблема была в правах на запись, о чем он сообщил. То есть, данные вообще не обновлялись, и до mysql_affected_rows дело не доходило.
У второго эта функция вообще в коде отсутствовала.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1118 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.