Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490

Количество затронутых обработкой строк

29.02.2016, 16:09. Показов 2901. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то не могу сообразить вот что: произвожу в коде какую-нить операцию с MySQL (например, UPDATE или DELETE) c условием WHERE
Ну допустим
SQL
1
UPDATE `My_table` SET `field1`='some_text', `field2`=0 WHERE `id` IN (2,4,5,12,32,40,55,982,1023);
Если я такой код выполню в phpMyAdmin (или, допустим, какой-нить Adminer), то я увижу некое сообщение типа "Запрос завершён, изменено 4 записи"

А как мне получить количество затронутых запросом строк в PHP? А в идеале еще бы и ключи затронутых строк получить...

P.S. Не.. я могу, конечно, перед выполнением скрипта сделать SELECT с таким же условием и понять, сколько и чего у меня поменяется. Но это лишние запросы к БД.. плюс (не уверен, но запросто), что если с системой работает несколько пользователей, то между SELECT-ом и UPDATE-ом может произойти изменение БД, и данные SELECT-а станут неактуальными.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.02.2016, 16:09
Ответы с готовыми решениями:

Как быть с подготовленными запросами в PDO? execute() не возвращает количество затронутых строк
Метод exec() возвращает количество затронутых строк, но его нельзя использовать в подготовленных запросах. Для этого существует метод...

SQLite. Получить кол-во строк, затронутых UPDATE
"SELECT changes()" не проверяет, изменились ли записи в БД или просто были перезаписаны. Значит, единственный способ узнать, были ли...

помогите с обработкой строк
Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину...

24
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
29.02.2016, 16:16
mysqli::$affected_rows, если я правильно понял, что надо

Добавлено через 2 минуты
Цитата Сообщение от Laroux Посмотреть сообщение
А в идеале еще бы и ключи затронутых строк получить...
id что-ли???
1
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 16:29  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
если я правильно понял
правильно, спасибо. Что-то никогда не юзал такую функцию
В первой части вопрос считаем решенным

Цитата Сообщение от Пифагор Посмотреть сообщение
id что-ли???
да, перечень id (ну или как там у меня поле с ключом называется)
Можно как-то?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
29.02.2016, 16:32
Ну дык циклом после запроса id получите свободно. Как обычно.
PHP
1
2
3
while(тотото){
    echo $row['id'];//которые сответствуют запросу
}
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 16:39  [ТС]
проактит разве? вот в таком раскладе:
PHP
1
2
3
4
5
$q="UPDATE `My_table` SET `field1`='some_text', `field2`=0 WHERE `id` IN (2,4,5,12,32,40,55,982,1023);";
$r=mysql_query($q);
while($q=mysql_fetch_assoc($r)){
    $id_s[] = $q['id'];
}
Добавлено через 2 минуты
Ща поэкспериментирую..
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
29.02.2016, 16:42
Цитата Сообщение от Laroux Посмотреть сообщение
(2,4,5,12,32,40,55,982,1023)
Ну, если id известны заранее, то можно их и вывести))
А если не известны, то все равно они откуда-то приходят.
Так что по-любому вывести можно...

Добавлено через 1 минуту
И будет затронуто ровно столько строк, сколько пришло id
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
29.02.2016, 16:47
Тада-а-а-м: http://www.php.su/functions/?mysql-affected-rows
Оно?

P.S. Ой! А выше уже эта же функция написана... Опять невнимательность стряслась
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 16:52  [ТС]
а вот и нет
Цитата Сообщение от Пифагор Посмотреть сообщение
если id известны заранее, то можно их и вывести
не факт, что все предложенные id существуют.

Цитата Сообщение от Пифагор Посмотреть сообщение
если не известны, то все равно они откуда-то приходят
опять нет: если делать какой-нить апдейт по временному интервалу, допустим. Непонятно, какие строки будут затронуты

Добавлено через 2 минуты
Цитата Сообщение от Hikari Посмотреть сообщение
Оно?
ага, оно

Добавлено через 33 секунды
но не все, что я хотел.. с количеством я понял.. а вот какие конкретно строки обработались - вопрос
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
29.02.2016, 16:53
Почему ж не понятно?
WHERE же по-любому будет? Верно?
И будет скорее всего WHERE id.
А если не id, то вложенный запрос сделать и в цикле все id записать в массив, а потом вывести.
Или я загоняюсь???
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
29.02.2016, 16:55
Цитата Сообщение от Laroux Посмотреть сообщение
А в идеале еще бы и ключи затронутых строк получить...
Я думаю, одним запросом никак.

Учтите, что affected_rows возвращает количество реально изменённых строк. Если вы напишете так:
SQL
1
UPDATE `table` SET name = 'Vasya' WHERE name = 'Vasya'
В любом случае вернётся 0, поскольку фактически данные не были изменены, даже если записи с name = 'Vasya' существуют.
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 16:57  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
одним запросом никак
а как "не одним"? Но достоверно

Цитата Сообщение от Jodah Посмотреть сообщение
вернётся 0, поскольку фактически данные не были изменены
это меня больше чем устраивает
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
29.02.2016, 17:00
А если так?
SQL
1
UPDATE `table` SET `name` = 'Vasya' WHERE `id` = (SELECT `id` FROM `table` WHERE `name` = 'Petya');
1
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
29.02.2016, 17:00
Цитата Сообщение от Laroux Посмотреть сообщение
а как "не одним"? Но достоверно
Как обычно, сначала Select, затем Update.
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 17:12  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
А если так?
возможно.. только как мне получить перечень `id`-то? Так я и не пойму.

Цитата Сообщение от Jodah Посмотреть сообщение
сначала Select, затем Update
а если между ними в таблицу что-то успели вставить?

Добавлено через 5 минут
кстати,
PHP
1
2
3
4
5
$q="UPDATE `My_table` SET `field1`='some_text', `field2`=0 WHERE `id` IN (2,4,5,12,32,40,55,982,1023);";
$r=mysql_query($q);
while($q=mysql_fetch_assoc($r)){
    $id_s[] = $q['id'];
}
не работает.. ибо
Code
1
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
29.02.2016, 17:16
Похоже, действительно надо
Цитата Сообщение от Jodah Посмотреть сообщение
сначала Select, затем Update.
Цитата Сообщение от Laroux Посмотреть сообщение
а если между ними в таблицу что-то успели вставить?
Можно делать задержку обработки sleep()
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 17:17  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
Можно делать задержку обработки
?? вроде как наоборот
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
29.02.2016, 17:25
Цитата Сообщение от Laroux Посмотреть сообщение
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given
ну да. либо update, либо нет.

Добавлено через 4 минуты
А может и нет смысла.
Вряд ли кто-то одновременно запрос пошлет. Все равно разница на доли секунды будет.
Хотя, я бы сделал.

Добавлено через 2 минуты
если запросов слишком много будет, можно, ИМХО (хотя это бред наверное), сделать типа счетчика и отслеживать, что пока например 25 запрос не обработался, то 26 на задержке.
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 17:37  [ТС]
О! нагуглил вроде решение проблемы - LOCK TABLES/UNLOCK TABLES
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
29.02.2016, 17:40  [ТС]
вот оно
Миниатюры
Количество затронутых обработкой строк  
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
29.02.2016, 18:58
Я что-то не пойму, у тебя же есть список ID, которые ты затрагиваешь.
Какой смысл их получать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.02.2016, 18:58
Помогаю со студенческими работами здесь

Проблемы с обработкой длинных строк на кириллице
Всем привет! Не могу нигде найти ответ на вопрос почему обрезаются строки. есть процедура Код (PHP): Sub Click(Source As Button)...

Реализация консольного калькулятора с обработкой строк
Реализация консольного калькулятора с обработкой строк. Помогите чем кто может, заранее спасибо:)

Подсчитать количество пучтых строк и количество строк,которые начинаются и оканчиваются на одну и ту же букву.
Дан текстовый файл.Подсчитать количество пучтых строк и количество строк,которые начинаются и оканчиваются на одну и ту же...

Поменять местами две средних строки, если количество строк четное, и первую со средней строкой, если количество строк нечетное
поменять местами двесредних строки, если количество строк четное, и первую со средней строкой, если количество строк нечетное

Массив из строк. 1) Подсчитать количество одинаковых строк. 2) Реверс строк
Необходимо 1) Определить число одинаковых слов. 2) Сформировать второй массив, в котором порядок букв в словах изменен на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru