Вот скрипт:
mysql_query("UPDATE thirdproba SET str2 = 'mmm' WHERE num1 < 300");
echo 'AFFECTED_ROWS2 = ' . mysql_affected_rows() . "\n";
первый раз запускаю - физические изменения произошли - выведет: 3.
потом его же запускаю, физич. изменений нет - выведет: 0. Т.е. как обычно.
В одной cms запускаю тот же код - всегда выводит: 3.
Из-за чего может быть?
Спустя 34 минуты, 25 секунд (25.06.2010 - 11:46) Kuzya написал(а):
В первый раз в строках, где num1 < 300, поле str2 не равно mmm. Первый запрос всё меняет, и второй уже не делает ничего т.д. менять по сути нечего (в нужных str2 уже mmm)
Спустя 15 минут, 46 секунд (25.06.2010 - 12:02) waldicom написал(а):
Цитата (Kuzya @ 25.06.2010 - 10:46) |
В первый раз в строках, где num1 < 300, поле str2 не равно mmm. Первый запрос всё меняет, и второй уже не делает ничего т.д. менять по сути нечего (в нужных str2 уже mmm) |
Написал то же самое, потом почитал еще раз вопрос и стер.
Советую еще раз прочитать вопрос.
Спустя 13 минут, 19 секунд (25.06.2010 - 12:15) Kuzya написал(а):
Если Вы про
Цитата |
В одной cms запускаю тот же код - всегда выводит: 3. |
То та же CMS далее, в ходе работы, может менять эти записи на свои. Скорее всего так и есть, если запуская код "вчистую" - один результат, а в составе CMS - другой
Спустя 1 минута, 6 секунд (25.06.2010 - 12:17) SlavaFr написал(а):
Цитата (Michael @ 25.06.2010 - 08:12) |
В одной cms запускаю тот же код - всегда выводит: 3. Из-за чего может быть? |
Cache?
Спустя 29 минут, 2 секунды (25.06.2010 - 12:46) Kuzya написал(а):
Да нет. Просто видимо дальше по коду в CMS выполняются какие-то запросы которые меняют те 3 строчки
Спустя 5 минут, 56 секунд (25.06.2010 - 12:51) glock18 написал(а):
Все просто. mysql_affected_rows() возвращает количество фактически измененных строк. то есть если строка под условие подошла, но она уже содержит нужные значения, она не считается
Спустя 6 минут, 14 секунд (25.06.2010 - 12:58) waldicom написал(а):
Цитата (glock18 @ 25.06.2010 - 11:51) |
Все просто. mysql_affected_rows() возвращает количество фактически измененных строк. то есть если строка под условие подошла, но она уже содержит нужные значения, она не считается |
Цитата |
первый раз запускаю - физические изменения произошли - выведет: 3. потом его же запускаю, физич. изменений нет - выведет: 0. Т.е. как обычно. |
Т.е. Michael понимает этот факт. Его интересует, почему в другой CMS такое не работает.
Спустя 16 минут, 55 секунд (25.06.2010 - 13:15) Michael написал(а):
Цитата (Kuzya @ 25.06.2010 - 11:46) |
Да нет. Просто видимо дальше по коду в CMS выполняются какие-то запросы которые меняют те 3 строчки |
Я же пишу, что выполняю в cms тот же код:
mysql_query("UPDATE thirdproba SET str2 = 'mmm' WHERE num1 < 300");
echo 'AFFECTED_ROWS2 = ' . mysql_affected_rows() . "\n";
т.е. между запросом и подсчетом нет никакого "левого" кода. Да и функции использую низкоуровневые, а не оболочки от cms.
Спустя 12 минут, 15 секунд (25.06.2010 - 13:27) SlavaFr написал(а):
@Michael попробуй так
чисто из интереса
mysql_query("UPDATE thirdproba SET str2 = 'mmm' WHERE num1 < 300");
echo '1)AFFECTED_ROWS2 = ' . mysql_affected_rows() . "\n";
mysql_query("UPDATE thirdproba SET str2 = 'mmm' WHERE num1 < 300");
echo '2)AFFECTED_ROWS2 = ' . mysql_affected_rows() . "\n";
чисто из интереса
Спустя 8 минут, 55 секунд (25.06.2010 - 13:36) Michael написал(а):
SlavaFr, выводит:
1)AFFECTED_ROWS2 = 3
2)AFFECTED_ROWS2 = 3
p.s.cms - Drupal.
1)AFFECTED_ROWS2 = 3
2)AFFECTED_ROWS2 = 3
p.s.cms - Drupal.
Спустя 55 минут, 43 секунды (25.06.2010 - 14:32) glock18 написал(а):
посмотри, может он функцию эту переопределяет. поведение ненормальное, пробегись поиском по проекту
ЗЫ: сорри, че-то сначала не вьехал в суть проблемы, выходит.
ЗЫ: сорри, че-то сначала не вьехал в суть проблемы, выходит.
Спустя 10 минут, 41 секунда (25.06.2010 - 14:42) Michael написал(а):
Цитата (glock18 @ 25.06.2010 - 13:32) |
посмотри, может он функцию эту переопределяет. поведение ненормальное, пробегись поиском по проекту |
не, не заметно ничего.
Кстати, а как переопределить функцию php ?
Спустя 28 минут, 28 секунд (25.06.2010 - 15:11) SlavaFr написал(а):
кроме как update ...where ... and str2 <> 'mmm'
не могу ни чего предложить.
не могу ни чего предложить.
Цитата |
Кстати, а как переопределить функцию php smile.gif ? |
Спустя 1 час, 11 минут, 9 секунд (25.06.2010 - 16:22) SlavaFr написал(а):
посмотри есть ли в mysql_connect 5-й параметр.
если я в коннекзии флаг 2 включаю, что соответствует CLIENT_FOUND_ROWS
mysql_connect('localhost','root','',false,2);
то у меня тоже начинает как у тебя показывать.
если я в коннекзии флаг 2 включаю, что соответствует CLIENT_FOUND_ROWS
mysql_connect('localhost','root','',false,2);
то у меня тоже начинает как у тебя показывать.
Спустя 13 минут, 33 секунды (25.06.2010 - 16:35) Michael написал(а):
Да, стоит двоечка.
Цитата |
CLIENT_FOUND_ROWS |
что то и в хелпе особо не описано. Где подробнее почитать ?
Спустя 7 минут, 28 секунд (25.06.2010 - 16:43) SlavaFr написал(а):
ето в общем в пхп не дефинированно, а в оригинальном коде mysql-clienta
http://de.php.net/manual/en/mysql.constants.php#96193
если от двоички избавится, то должно заработать
http://de.php.net/manual/en/mysql.constants.php#96193
если от двоички избавится, то должно заработать
Спустя 8 минут, 46 секунд (25.06.2010 - 16:52) SlavaFr написал(а):
Цитата (SlavaFr @ 25.06.2010 - 13:43) |
если от двоички избавится, то должно заработать |
что перестанет после этого работать, еще не знаю
Спустя 13 часов, 51 минута, 17 секунд (26.06.2010 - 06:43) Michael написал(а):
А никто от двоечки избавляться и не будет. Это же очень удобно.
Спустя 5 часов, 24 минуты, 13 секунд (26.06.2010 - 12:07) SlavaFr написал(а):
Цитата (Michael @ 26.06.2010 - 03:43) |
А никто от двоечки избавляться и не будет. Это же очень удобно. |
если ты упдате как "select count(*)" использовать хочеш, то да
или есть еще какие то приемущества?
Спустя 2 часа, 26 минут, 7 секунд (26.06.2010 - 14:33) glock18 написал(а):
Фактически и тот, и тот вариант - заменяет один каунт. просто условия у такого каунта в обоих случаях немного отличаются
Спустя 1 день, 21 час, 4 минуты, 22 секунды (28.06.2010 - 11:38) SlavaFr написал(а):
да, есть изобретения без которых мир мог бы обойтись.
А в общем это не нормально, что в функции используется значение константы которая в пхп не дефинированна. Не кому не нужно терять свое время на поиск причин неправильного действия функции по причине того, что в другой функции чтото необычное установлено. Я бы не чего не имел против, если бы mysql_affected_rows имела специальный параметер который бы CLIENT_FOUND_ROWS устанавливал, но в таком виде ...
А в общем это не нормально, что в функции используется значение константы которая в пхп не дефинированна. Не кому не нужно терять свое время на поиск причин неправильного действия функции по причине того, что в другой функции чтото необычное установлено. Я бы не чего не имел против, если бы mysql_affected_rows имела специальный параметер который бы CLIENT_FOUND_ROWS устанавливал, но в таком виде ...
Спустя 1 час, 41 минута, 25 секунд (28.06.2010 - 13:19) Michael написал(а):
Цитата (SlavaFr @ 26.06.2010 - 11:07) |
или есть еще какие то приемущества? |
вот мне никогда не нравилось что при запросе update функция mysql_affected_rows() стандартно(без этой малоизвестной настройки) возвращает кол-во реально физически измененных строк.
Это уже как бы тонкости базы - как оптимизировать запросы, а мне лично, как клиенту БД, логично ожидать, что выполняя update - все строки будут им затронуты. Почему? Да потому что я запрос шлю на изменение записей по условию и под это условие записи существуют. И результат запроса должен быть положительный.
Спустя 20 минут (28.06.2010 - 13:39) tomash написал(а):
Michael
Часто бывает нужно когда необходимо знать именно количество изменений фактических. Например для изменения записей по внешним ключам, что бы не делать лишних телодвижений)
Часто бывает нужно когда необходимо знать именно количество изменений фактических. Например для изменения записей по внешним ключам, что бы не делать лишних телодвижений)
Спустя 1 час, 51 минута, 51 секунда (28.06.2010 - 15:31) SlavaFr написал(а):
Цитата (Michael @ 28.06.2010 - 10:19) |
а мне лично, как клиенту БД, логично ожидать, что выполняя update - все строки будут им затронуты. Почему? Да потому что я запрос шлю на изменение записей по условию и под это условие записи существуют. И результат запроса должен быть положительный. |
да дело в том, что действительно они не будут затронуты, и если ты поля типа
xxx timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
имееш, то увидеш, что время не поменялось. Зачем тогда самообманом заниматся? лучше действительно дополнительный селект запустить.
_____________
There never was a struggle in the soul of a good man that was not hard