Как узнать, успешно ли мое обновление или нет? я update using where uniqueName = name, поэтому я должен всегда обновлять только 0 строк или 1. Что является хорошим способом проверить, обновил ли я строку или нет?
Строки, затронутые в обновлении mysql с помощью PHP
Ответ 1
mysql_affected_rows()
вернет число строк, затронутых вашим обновлением.
http://us.php.net/manual/en/function.mysql-affected-rows.php
Ответ 2
Нет никакого способа узнать это. Скажем, таблица 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.
Ответ 3
Используйте mysql_affected_rows
.
Ответ 4
попробуйте использовать mysql_affected_rows ([$ link])
Ответ 5
Итак, что, если пользователь повторно передает данные, которые уже совпадают с информацией в БД? Если используется память, это приведет к возврату mysql_affected_rows() со значением 0, потому что по определению в этом процессе не было обновлено ни одной строки. Однако сам запрос был успешным.
Обходной путь к этому будет заключаться в том, чтобы либо подтвердить свой контент перед вставкой, либо использовать:
$result = mysql_query($q);
if( mysql_affected_rows() == 0 )
$state = $result ? "Success" : "Fail";
Таким образом, вы можете проверить, обновлены ли строки, и если вы не можете проверить, было ли это неисправностью или просто повторить данные.
Ответ 6
если ваш запрос на обновление находится в переменной с именем $query, вы можете сделать:
$result = mysql_query($query);
if($result){
//succes!
} else {
//fail!
}
Надеюсь, это поможет. Если вы просто хотите знать, был ли ваш запрос выполнен успешно, это будет сделано. Если вы действительно хотите узнать, сколько строк затронуто, используйте другие предложения.
Ответ 7
Я довольно поздно здесь, но вы всегда можете заставить неудачу не совпадать, изменив ваш запрос.
Для таблицы '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')
Скорее всего, просто изменить таблицу, чтобы вместо этого добавить либо временную метку обновления, либо порядковый номер. (так как они будут меняться при каждом обновлении)
Ответ 8
mysql_affected_rows ($ link) является правильным, но обесценивается.. mysqli_affected_rows ($ link) следует использовать сейчас.
Ответ 9
При использовании 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");
Ответ 10
Если вы используете подготовленный оператор.
//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";