![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
LOBsTerr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 22.2.2006 Где: Ташкент Репутация: нет Всего: нет |
Помоему это тема примерно про тоже, но мне к сожалению не помогает дело с правами. если выполняю в Мускуле действительно все проходит нормально, а вот из пхп mysql_affected_rows() - возвращает 0.
Я стал разбираться с этой проблемой и обратил внимание на такую вещь, что если поля не изменились, то есть сохранили те же значения, то mysql_affected_rows() - возвращает 0. А в мускуле соотвественно все нормально. Беру даже самые простейшие запросы. С правами все нормально, у пользователя стоит grant all Privileges. Помогите кто знает потому что, я пока не нашел решения. А проблема в том что у меня другая таблица содержит ссылку на мою таблицу, в случае обновления я обновляю и ссылку. А т.к. обновление ссылки происходит после, то у меня оно не происходит, т.к. не пропускается условие:
НУ а так как пользователь может не трогать данные а только обновить данные связанные с сылкой, то получается запрос не пройдет. Спасибо заранее всем за помощь PS - я конечно нашел решение, сравнивать массивы котрый у меня был до и после, и если изменился обновлять, но меня интересует почему mysql_affected_rows() , так странно себя ведет! Или почему mysql_query - не апдейтит значения. Это сообщение отредактировал(а) LOBsTerr - 24.3.2008, 22:40 |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
фееричный топик.
три совершенно разных вопроса. Странно она себя ведет только на твой взгляд. На мой взгляд, она ведет себя совершенно логично. У тебя есть конкретные вопросы, а не абстрактные, типа "почему жизнь так ужасно устроена" или "почему mysql_affected_rows() работает так или иначе"? |
|||
|
||||
LOBsTerr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 22.2.2006 Где: Ташкент Репутация: нет Всего: нет |
Ну фееричный, он на первый взгляд, а вот с практической стороны, работа функции вызвала много вопросов и соотвественно и проблемы с ними. Правильно ли я понимаю, что если значения в запросе не отличаются от тех, что содержаться в таблице, то mysql_affected_rows() вернет 0?
Если да то почему? (Ведь в мускуле все это выполняется нормально) PS А на счет счет, что жизнь ужасно устроена я и без этого знаю ![]() |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
Как ты мог бы заметить, ни к одному из предшествовавших вопросов эта функция не имела никакого отношения.
Правильно. О чем можно было прочитать в документации. Это, как я считаю, самый правильный путь - при возникновении проблем с функцией пхп, идти читать документацию по этой функции, а не форум. Попробуй себе ответить на вопрос, сколько строк изменилось. Сравни с ответом функции. ЧТО выполняется в мускуле нормально? Это сообщение отредактировал(а) Feldmarschall - 24.3.2008, 23:15 |
|||
|
||||
LOBsTerr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 22.2.2006 Где: Ташкент Репутация: нет Всего: нет |
2 Feldmarschall - Спасибо, тебе за ответы. Хотелось бы многое тебе сказать, но этот форум не для этого создан, поэтому дам тебе совет, если хочешь помочь людям помогай, а не еще больше их путай (много постороннего ).
Вообщем, теперь подведу резюме. Если при апдейте значения в запросе не отличаются от тех, что хранятся в БД, то функция mysql_affected_rows(), ВСЕГДА будет возвращать 0, не смотря на то, что если Вы будете выполнять это напрямую в БД, через какие нибудь средства типа (mysql query browser и т.п.) и результат будет в этих средствах не 0, а именно 1 или столько сколько строк было извлечено. mysql_query () - При апдейте всегда возвращает true, в случае когда апдейт прошел Успешно, и в случае если он не прошел, из-за того, что значения совпадали со значниями в таблице. Не допускайте моей ошибки, используйте, mysql_affected_rows(), для того что узнать прошел ли апдейт или нет, все таки эта функция создана не для этого а чтобы узнать сколько строк было извлечено. делайте если, это необходимо все дополнительные проверки до этого. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
по-моему, он вполне четко сказал. во-первых, при проблемах с функциями смотрим документацию. во-вторых, далеко не всегда логичное с точки зрения человека заключение действительно логично(PHP ведь работает с бинарной логикой: никаких допущений и ожиданий). что, кстати, логично. при выполнении запроса во front-end'e у тебя запрос. сложный или простой - не важно. при работе же через клиент-программу программист не ограничится выполнеинем запроса. будет ещё какая логика. и чтоб не приходилось отдельным запросом выбирать количество реально измененных строк(зачем?), функция(реализованная, кстати, на С - у MySQL родным является С API, а не PHP) возвращает количество тех, что изменились. Если же тебе надо найти количество строк, которые удовлетворяют условию, используй дополнительный SELECT. непонятно. либо у тебя ссылки и раньше ссылалсь на эту запись и бессмысленно эту ссылку обновлять(данные-то даже не изменились). либо у тебя ссылка раньше не ссылалась, а теперь должна. тогда зачем делать проверку на affected_rows?
|
|||
|
||||
LOBsTerr |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 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(). Спасибо всем за помощь |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
У первого автора той темы проблема была в правах на запись, о чем он сообщил. То есть, данные вообще не обновлялись, и до mysql_affected_rows дело не доходило.
У второго эта функция вообще в коде отсутствовала. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |