Строки, затронутые в обновлении mysql с помощью PHP

Как узнать, успешно ли мое обновление или нет? я update using where uniqueName = name, поэтому я должен всегда обновлять только 0 строк или 1. Что является хорошим способом проверить, обновил ли я строку или нет?

Ответ 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.

Ответ 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')

Скорее всего, просто изменить таблицу, чтобы вместо этого добавить либо временную метку обновления, либо порядковый номер. (так как они будут меняться при каждом обновлении)

Ответ 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";