|
|
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть таблица, где поле isbn это AUTO_INCREMENT. Делаю запрос на обновление: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Как узнать была ли изменена строка или входные параметры были не верны и условие isbn=? AND activateHash=? не нашлось? Я хотел проверять какое-нибудь значение из echo, но все они всегда выдают 0, хотя update происходит. Только $mysqli->info выдает Rows matched: 1 Changed: 0 Warnings: 0 этим конечно можно пользоваться, но совершенно не удобно... Главный вопрос, почему insert_id, affected_rows, field_count всегда равны 0? (при INSERT все нормально, строки считаются) Как мне правильно проверить обновилась строка или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 19:17:23 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
insert_id вообще к UPDATE никакого отношения не имеет. affected_rows не учитывает записи, которые не были фактически изменены. Т.е. даже если под условие WHERE попали какие-то записи, но реального изменения в них не произошло, т.к. новые значения уже содержатся в полях этих записей, то они посчитаны не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 19:41:02 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
Допустим изменение происходит реально. Как же тогда на php.net для affected_rows - Возвращает количество строк, измененных запросом INSERT, UPDATE или DELETE; для insert_id - Функция mysqli_insert_id() возвращает ID, генерируемый запросом к таблице, которая содержит колонку с атрибутом AUTO_INCREMENT. Если последний запрос не был INSERT или UPDATE или в модифицируемой таблице отсутствует колонка с атрибутом AUTO_INCREMENT, данная функция вернет ноль. Запрос был UPDATE и AUTO_INCREMENT есть. Но все равно 0. Если все это не правильно, то как лучше сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 19:52:20 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
lucky89Как мне правильно проверить обновилась строка или нет?если ошибку не вернуло, значит, обновилась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 19:55:20 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
lucky89Запрос был UPDATE и AUTO_INCREMENT есть. Но все равно 0. lucky89Функция mysqli_insert_id() возвращает ID, генерируемый запросом к таблицеапдейт-запрос новых идов не генерирует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 19:56:11 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
lucky89Как же тогда на php.net для affected_rows - Возвращает количество строк, измененных запросом INSERT, UPDATE или DELETE;Именно "измененных". http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_row-count For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect() when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WHERE clause.Возможно, CLIENT_FOUND_ROWS поможет. lucky89для insert_id - Функция mysqli_insert_id() возвращает ID, генерируемый запросом к таблице, которая содержит колонку с атрибутом AUTO_INCREMENT. Если последний запрос не был INSERT или UPDATE или в модифицируемой таблице отсутствует колонка с атрибутом AUTO_INCREMENT, данная функция вернет ноль. Запрос был UPDATE и AUTO_INCREMENT есть. Но все равно 0.Не знаю, где вы это взяли, но в оригинальной документации про UPDATE ничего нет: http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id With no argument, LAST_INSERT_ID() returns a 64-bit value representing the first automatically generated value successfully inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement. lucky89как лучше сделать?Пока еще не очень понятно, что именно и зачем нужно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:01:22 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
tanglirесли ошибку не вернуло, значит, обновилась Меняю activateHash на неправильный, isbn=? AND activateHash=? не выполняется, активация не выполнена, строка не изменена, ошибок не выдается. Значит, как вы написали, такой проверке верить нельзя. С insert_id() понятно, спасибо tanglir. С affected_rows и field_count пока не ясно. И про то что affected_rows не считает, если новые значения уже есть в таблице нигде не написано. Разве нельзя выполнить UPDATE users SET activate=1 WHERE activate=1? 1 не перезапишется снова на 1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:04:59 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
lucky89И про то что affected_rows не считает, если новые значения уже есть в таблице нигде не написано.В оригинальной документации написано. Одно из мест я процитировал выше. lucky89Разве нельзя выполнить UPDATE users SET activate=1 WHERE activate=1? 1 не перезапишется снова на 1?Выполнить можно. Но не перезапишется. Насколько я помню, даже триггера не сработают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:10:21 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
lucky89Допустим изменение происходит реально. Как же тогда на php.net для affected_rows - Возвращает количество строк, измененных запросом INSERT, UPDATE или DELETE; для insert_id - Функция mysqli_insert_id() возвращает ID, генерируемый запросом к таблице, которая содержит колонку с атрибутом AUTO_INCREMENT. Если последний запрос не был INSERT или UPDATE или в модифицируемой таблице отсутствует колонка с атрибутом AUTO_INCREMENT, данная функция вернет ноль. Запрос был UPDATE и AUTO_INCREMENT есть. Но все равно 0. Если все это не правильно, то как лучше сделать? Лучше, даже если все это правильно, прочитать строку(ки) обратно и проверить, что она(они) действительно изменились. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:10:57 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
miksoftПока еще не очень понятно, что именно и зачем нужно сделать. Обычная активация email. Пробую все ужать в 1 обращение к БД, без предварительных INSERT и вообще без сравнений в PHP. Когда пользователь регистрировался ему присваевается уникальный isbn (AUTO_INCREMENT) и записывается случайная md5 в activateHash. Отправляется письмо на email с сылкой с get параметрами isbn и activateHash, он по ней переходит и дальше я придумал что выполняется команда UPDATE users SET activate=1 WHERE isbn=? AND activateHash=?, строка изменится только в том случае если связка isbn и activateHash верна, и пользователь активируется иначе либо ошибка либо строка не находится и значит не меняется. Вопрос, как точно узнать была ли изменена строка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:16:41 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
lucky89, В данном случае, имхо, лучше совета MasterZiv-а вряд ли что-то придумаешь. Читаете запись и проверяете activate. Или читаете с условием "нужный пользователь" и activate=1 и проверяете, вернулась ли запись. Или COUNT-ом считаете количество записей с условием "нужный пользователь" и activate=1. Первые два варианта мне больше нравятся, т.к. попутно можно прочитать остальные поля и, например, вывести приветствие вида "Здравствуйте, Иванов Иван Иванович. Ваша учетная запись активирована". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:27:42 |
|
||
|
insert_id возвращает 0
|
|||
|---|---|---|---|
|
#18+
Пожалуй сделаю как советуете, прочитаю запись. Но у меня получилось в 1 запрос (affected_rows заработал), только там добавится нюанс, если пользователь второй раз по ссылке кликнет, типа повторную активацию вызовит, когда activate уже = 1. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:37:09 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38980514&tid=1833077]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 304ms |

| 0 / 0 |
