Как узнать, успешно ли мое обновление или нет? i update using where uniqueName = name, поэтому я должен всегда обновлять только 0 строк или 1. Что является хорошим способом проверить, обновил ли я строку или нет?
mysql_affected_rows()
вернет количество строк, затронутых вашим обновлением.
http://us.php.net/manual/en/function.mysql-affected-rows.php
На самом деле нет способа узнать это. Скажем, таблица tbl_numbers (id, value) имеет строки (1, «один») и (2, «два»);
$result1="update tbl_numbers set value='first' where id=1";
Если вы проверяете $ result1 в условии if, он возвращает true, а mysql_affected_rows () возвращает 1.
Однако для $result2="update tbl_numbers set value='two' where id=2";
Если вы проверяете $ result2 в условии if, он возвращает true, а mysql_affected_rows () возвращает 0.
И, для $result3="update tbl_numbers set value='three' where id=3";
Если вы проверяете $ result3 в условии if, он возвращает true, а mysql_affected_rows () возвращает 0.
Используйте mysql_affected_rows
.
попробуйте использовать mysql_affected_rows ([$ link])
Итак, что, если пользователь повторно передает данные, которые уже совпадают с информацией в БД? Если используется память, это приведет к возврату mysql_affected_rows () со значением 0, потому что по определению в этом процессе не было обновлено ни одной строки. Однако сам запрос был успешным.
Обходной путь к этому будет заключаться в том, чтобы либо подтвердить свой контент перед вставкой, либо использовать:
$result = mysql_query($q); if( mysql_affected_rows() == 0 ) $state = $result ? "Success" : "Fail";
Таким образом, вы можете проверить, были ли строки обновлены, и если вы не можете проверить, была ли это неисправность или просто повторить данные.
если ваш запрос на обновление находится в переменной с именем $ query, вы можете сделать это;
$result = mysql_query($query); if($result){ //succes! } else { //fail! }
Надеюсь это поможет. Если вы просто хотите знать, был ли ваш запрос выполнен успешно, это будет сделано. Если вы действительно хотите знать, сколько строк затронуто, используйте другие предложения.
Я очень опаздываю здесь, но вы всегда можете заставить неудачу не совпадать, изменив ваш запрос.
Для таблицы 'foo' с идентификаторами столбцов '' и 'value'. Выражение соответствия: ID = 4
update foo join (select ID as nearID, ID = 4 as matched from foo order by matched desc limit 0, 1) as t on nearID = ID set value='somedata2' , ID = if(matched, nearID, 'nomatch')
Вероятно, проще просто изменить таблицу, чтобы вместо этого добавить либо временную метку обновления, либо порядковый номер. (поскольку они будут меняться при каждом обновлении)
mysql_affected_rows ($ link) является правильным, но обесценивается .. mysqli_affected_rows ($ link) следует использовать сейчас.
При использовании PDO затронутые строки могут быть получены с помощью функции rowCount (), как показано ниже:
/* Delete all rows from the FRUIT table */ $del = $dbh->prepare('DELETE FROM fruit'); $del->execute(); /* Return number of rows that were deleted */ print("Return number of rows that were deleted:\n"); $count = $del->rowCount(); print("Deleted $count rows.\n");
Если вы используете подготовленный отчет ..
//query $stmt = $conn->prepare("UPDATE user SET name = 'Jack' WHERE id = ?"); //bind parameters $stmt->bind_param("i", $id); //execute $stmt->execute(); //updated row count echo $stmt->affected_rows; echo " rows updated";