|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
Есть простая таблица в 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(), но не хочется добавить лишний столбец. Как обычно проверяют такие условия? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2018, 20:24 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
Почему бы просто не проверить результат выполнения запроса на предмет ошибки? Если ошибки не было, то изменения в базу сохранены. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2018, 20:43 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
tarabukinВопрос: Мне нужно знать была ли обновлена строка. Даже если ничего не было изменено, то тоже нужно вернуть истину.Встречный вопрос: как отличается ситуация "обновлена строка" от "не обновлена строка"? Собственно, только после четкого и ясного, хотя бы, для самого себя, ответа на этот вопрос, можно проверять отличительные признаки и делать выводы. tarabukinЕсли проверить так: if(mysql_affected_rows() >0) , то возвращается ложь, если ничего не было изменено. Т.е. получается: открыли редактирование таблицы, ничего не поменяли, нажали сохранить, то выскакивает ошибка.Успешно отработавший запрос UPDATE вполне может обновить 0 строк, что и покажет mysql_affected_rows() с абсолютной точностью. tarabukinКонечно можно сделать if(mysql_affected_rows() >0) с добавлением столбца например time(), но не хочется добавить лишний столбец.Ну... если обновления записей достаточно редки (реже, чем раз в секунду), а в дополнительное поле записывать текущий TIMESTAMP, тогда будут обновлены все записи, подходящие под условие и mysql_affected_rows() вернет число таких записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2018, 21:43 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
Допустим есть у посетителя личный кабинет. Он заходит в редактирование кабинета. Допустим он ничего не поменял. И нажимает кнопку сохранить. А у него выскакивает ошибка, что не удалось сохранить. По идее было бы хорошо, если бы вышло "Успешно сохранено". miksoftПочему бы просто не проверить результат выполнения запроса на предмет ошибки? Если ошибки не было, то изменения в базу сохранены. Дело в том, что если тип поля не соответствует значению, то она не показывает ошибку. Например, есть поле со значением enum: 0, 1. Если впихать туда строку типа 'dfklm', она не покажет ошибку, просто молча пихает 0 - значение по умолчанию и не показывает ошибку ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2018, 05:28 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
tarabukinесть поле со значением enum: 0, 1. Если впихать туда строку типа 'dfklm',Стоп. С какого перепугу в это поле впихивается левое значение? Проверяйте данные, прежде чем пихать чего попало. Не "0" и не "1" - формируйте сообщение об ошибке и/или устанавливайте значение по дефолту. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2018, 06:36 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
vkletarabukinесть поле со значением enum: 0, 1. Если впихать туда строку типа 'dfklm',Стоп. С какого перепугу в это поле впихивается левое значение? Проверяйте данные, прежде чем пихать чего попало. Не "0" и не "1" - формируйте сообщение об ошибке и/или устанавливайте значение по дефолту. Нельзя ли сделать так, чтобы sql сказал, что данные не те. Почему, если тип другой (например: если в int пихают строку), то не выводиться ошибка, а просто ставиться значение по умолчанию? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2018, 07:05 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
tarabukin, Даже не ставиться оказывается значение по умолчанию, а ставиться пустота, хотя стоит not Null. И ошибок не выдает. Или как еще можно вызвать ошибку, если на поле ставиться пустое значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2018, 07:10 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
Попробую написать понятнее))): Если в поле ENUM со значением '0', '1' ставлю значение 'stroka', то в поле ставиться пустота, хотя стоит not null, и нет никакой ошибки. Как можно получить ошибку, если в поле ставится недопустимое значение? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2018, 07:27 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
tarabukinДаже не ставиться оказывается значение по умолчанию, а ставиться пустотаВообще, не припоминаю в мускуле понятия "пустота". Есть "пустая строка", оно же "empty string". Ещё есть NULL - тоже, пустота своего рода. Ну, да, судя по дукументации, пустая строка и является признаком ошибочного значения, и это стандартное поведение СУБД: https://dev.mysql.com/doc/refman/5.7/en/enum.html#enum-nulls tarabukinИли как еще можно вызвать ошибку, если на поле ставиться пустое значение.В той же доке прям в соседней строчке упоминается sql mode. Эта штука в некоторых пределах управляет поведением мускуля. Возможно, какой-то из sql mode обеспечивает желаемое поведение. Попробуйте в эту сторону посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2018, 12:18 |
|
Узнать были ли сохранены изменения в базу?
|
|||
---|---|---|---|
#18+
vkletarabukinДаже не ставиться оказывается значение по умолчанию, а ставиться пустотаВообще, не припоминаю в мускуле понятия "пустота". Есть "пустая строка", оно же "empty string". Ещё есть NULL - тоже, пустота своего рода. Ну, да, судя по дукументации, пустая строка и является признаком ошибочного значения, и это стандартное поведение СУБД: https://dev.mysql.com/doc/refman/5.7/en/enum.html#enum-nulls tarabukinИли как еще можно вызвать ошибку, если на поле ставиться пустое значение.В той же доке прям в соседней строчке упоминается sql mode. Эта штука в некоторых пределах управляет поведением мускуля. Возможно, какой-то из sql mode обеспечивает желаемое поведение. Попробуйте в эту сторону посмотреть. Спасибо vkle посмотрю ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2018, 07:46 |
|
|
start [/forum/topic.php?fid=23&fpage=27&tid=1460409]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 144ms |
0 / 0 |