powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Узнать были ли сохранены изменения в базу?
10 сообщений из 10, страница 1 из 1
Узнать были ли сохранены изменения в базу?
    #39583528
tarabukin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть простая таблица в sql. И по нажатию на кнопку сохранить выполняется сохранение изменений. Запрос такой:
$query = "UPDATE `comp` SET `comp_login`= '$comp_login', `comp_name` = '$comp_name', `see` = '$see', `p_status` = '$p_status', `comp_text` = '$comp_text' WHERE `id_comp` = '$id_comp' AND `id_clients` = '$id_clients'";
Значения переменных берутся с пост запроса. Примерно такие: $comp_login = mysql_real_escape_string($request['comp_login']);

Вопрос: Мне нужно знать была ли обновлена строка. Даже если ничего не было изменено, то тоже нужно вернуть истину.
Если проверить так: if(mysql_affected_rows() >0) , то возвращается ложь, если ничего не было изменено. Т.е. получается: открыли редактирование таблицы, ничего не поменяли, нажали сохранить, то выскакивает ошибка.

А if(mysql_affected_rows() == -1) выполняется только, если есть конкретные ошибки. Т.е. в таблице есть стpока enum со значениями '0','1'. Если я в это поле отправляю текст, то ставит 0 и пишет нет ошибки.

INSERT .... ON DUPLICATE KEY дает такой же результат, как и от update. Т.е. если не были изменены значения, то ничего не возвращается. Если сделаю условие: если mysqli_insert_id() ничего не возвратило - ошибка. То получается: открыли редактирование таблицы, ничего не поменяли, нажали сохранить, то выскачет ошибка.

Конечно можно сделать if(mysql_affected_rows() >0) с добавлением столбца например time(), но не хочется добавить лишний столбец.

Как обычно проверяют такие условия?
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583538
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы просто не проверить результат выполнения запроса на предмет ошибки?
Если ошибки не было, то изменения в базу сохранены.
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583559
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tarabukinВопрос: Мне нужно знать была ли обновлена строка. Даже если ничего не было изменено, то тоже нужно вернуть истину.Встречный вопрос: как отличается ситуация "обновлена строка" от "не обновлена строка"? Собственно, только после четкого и ясного, хотя бы, для самого себя, ответа на этот вопрос, можно проверять отличительные признаки и делать выводы.

tarabukinЕсли проверить так: if(mysql_affected_rows() >0) , то возвращается ложь, если ничего не было изменено. Т.е. получается: открыли редактирование таблицы, ничего не поменяли, нажали сохранить, то выскакивает ошибка.Успешно отработавший запрос UPDATE вполне может обновить 0 строк, что и покажет mysql_affected_rows() с абсолютной точностью.

tarabukinКонечно можно сделать if(mysql_affected_rows() >0) с добавлением столбца например time(), но не хочется добавить лишний столбец.Ну... если обновления записей достаточно редки (реже, чем раз в секунду), а в дополнительное поле записывать текущий TIMESTAMP, тогда будут обновлены все записи, подходящие под условие и mysql_affected_rows() вернет число таких записей.
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583611
tarabukin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим есть у посетителя личный кабинет. Он заходит в редактирование кабинета. Допустим он ничего не поменял. И нажимает кнопку сохранить. А у него выскакивает ошибка, что не удалось сохранить. По идее было бы хорошо, если бы вышло "Успешно сохранено".


miksoftПочему бы просто не проверить результат выполнения запроса на предмет ошибки?
Если ошибки не было, то изменения в базу сохранены.

Дело в том, что если тип поля не соответствует значению, то она не показывает ошибку. Например, есть поле со значением enum: 0, 1. Если впихать туда строку типа 'dfklm', она не покажет ошибку, просто молча пихает 0 - значение по умолчанию и не показывает ошибку
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583614
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tarabukinесть поле со значением enum: 0, 1. Если впихать туда строку типа 'dfklm',Стоп. С какого перепугу в это поле впихивается левое значение? Проверяйте данные, прежде чем пихать чего попало. Не "0" и не "1" - формируйте сообщение об ошибке и/или устанавливайте значение по дефолту.
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583615
tarabukin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkletarabukinесть поле со значением enum: 0, 1. Если впихать туда строку типа 'dfklm',Стоп. С какого перепугу в это поле впихивается левое значение? Проверяйте данные, прежде чем пихать чего попало. Не "0" и не "1" - формируйте сообщение об ошибке и/или устанавливайте значение по дефолту.

Нельзя ли сделать так, чтобы sql сказал, что данные не те. Почему, если тип другой (например: если в int пихают строку), то не выводиться ошибка, а просто ставиться значение по умолчанию?
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583616
tarabukin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tarabukin,

Даже не ставиться оказывается значение по умолчанию, а ставиться пустота, хотя стоит not Null. И ошибок не выдает. Или как еще можно вызвать ошибку, если на поле ставиться пустое значение.
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583617
tarabukin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую написать понятнее))):
Если в поле ENUM со значением '0', '1' ставлю значение 'stroka', то в поле ставиться пустота, хотя стоит not null, и нет никакой ошибки. Как можно получить ошибку, если в поле ставится недопустимое значение?
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583649
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tarabukinДаже не ставиться оказывается значение по умолчанию, а ставиться пустотаВообще, не припоминаю в мускуле понятия "пустота". Есть "пустая строка", оно же "empty string". Ещё есть NULL - тоже, пустота своего рода. Ну, да, судя по дукументации, пустая строка и является признаком ошибочного значения, и это стандартное поведение СУБД: https://dev.mysql.com/doc/refman/5.7/en/enum.html#enum-nulls

tarabukinИли как еще можно вызвать ошибку, если на поле ставиться пустое значение.В той же доке прям в соседней строчке упоминается sql mode. Эта штука в некоторых пределах управляет поведением мускуля. Возможно, какой-то из sql mode обеспечивает желаемое поведение. Попробуйте в эту сторону посмотреть.
...
Рейтинг: 0 / 0
Узнать были ли сохранены изменения в базу?
    #39583846
tarabukin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkletarabukinДаже не ставиться оказывается значение по умолчанию, а ставиться пустотаВообще, не припоминаю в мускуле понятия "пустота". Есть "пустая строка", оно же "empty string". Ещё есть NULL - тоже, пустота своего рода. Ну, да, судя по дукументации, пустая строка и является признаком ошибочного значения, и это стандартное поведение СУБД: https://dev.mysql.com/doc/refman/5.7/en/enum.html#enum-nulls

tarabukinИли как еще можно вызвать ошибку, если на поле ставиться пустое значение.В той же доке прям в соседней строчке упоминается sql mode. Эта штука в некоторых пределах управляет поведением мускуля. Возможно, какой-то из sql mode обеспечивает желаемое поведение. Попробуйте в эту сторону посмотреть.
Спасибо vkle посмотрю
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Узнать были ли сохранены изменения в базу?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]