обновление записей с подготовленными выписками, проверка работоспособности обновления - PullRequest
5 голосов
/ 19 января 2012

У меня есть запрос, который обновляет запись в моей базе данных, она работает нормально, но я хотел знать, как проверить, произошло ли обновление, чтобы я мог вернуть true и отобразить правильное сообщение?

Теперь я знаю, что с помощью запроса SELECT я могу сделать:

if(stmt->fetch())

Если это правда, я возвращаю true и говорю "записи найдены", но я не знаю, как это сделать для запроса на обновление?

Кто-нибудь знает, как?

$query = "UPDATE user
            SET password = ?
            WHERE email = ?";

if($stmt = $conn->prepare($query)) 
{
    $stmt->bind_param('ss', $pwd, $userEmail);
    $stmt->execute();

    //Check if update worked
}

Спасибо за помощь.

Ответы [ 6 ]

6 голосов
/ 19 января 2012

Execute метод возвращает True после успешного завершения, но если этого поведения вам недостаточно, вы можете также проверить наличие затронутых строк :

$query = "UPDATE user
            SET password = ?
            WHERE email = ?";

if($stmt = $conn->prepare($query)) 
{
    $stmt->bind_param('ss', $pwd, $userEmail);
    if ($stmt->execute()) {
        //query with out errors:
        printf("rows updateds: %d\n", $stmt->affected_rows);
    } else {
        //some error:
        printf("Error: %s.\n", $stmt->error);
    }
}

Второйпроверить, что вы можете сделать, это убедиться, что ровно 1 строка была обновлена:

if($stmt = $conn->prepare($query)) 
{
    $stmt->bind_param('ss', $pwd, $userEmail);
    if ($stmt->execute() and $stmt->affected_rows == 1) {
        //your update is succesfully.
    }
}
5 голосов
/ 19 января 2012

проверьте, работает ли ниже

$query = "UPDATE user
        SET password = ?
        WHERE email = ?";

if($stmt = $conn->prepare($query)) 
{
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute()) 
{
// worked
} 
else 
{
// not worked
}

Удачи !!!

1 голос
/ 19 января 2012

С руководство для mysqli_stmt_execute ()

Returns TRUE on success or FALSE on failure.

0 голосов
/ 24 июля 2016

Несколько лет спустя, но, возможно, это может кому-то помочь.

Как уже упоминали другие, вы можете использовать disabled_rows, чтобы проверить, действительно ли запрос UPDATE в ПОДГОТОВЛЕННОМ ЗАЯВЛЕНИИ обновил какую-либо запись.Тем не менее, обратите внимание, что, если представленные данные совпадают с записью в базе данных, «lost_rows» вернет ноль (0).

Мой обходной путь - создание столбца для TIMESTAMP с ON UPDATE CURRENT_TIMESTAMP.Затем каждый раз, когда я запускаю запрос, я также передаю значение NULL столбцу, отслеживающему время - таким образом, заставляя строку обновляться при каждом выполнении запроса.Тогда все, что вы делаете, это проверяете

0 голосов
/ 19 января 2012

Если вы используете PDO (кажется, что ...), вы можете проверить с помощью rowCount:

$affected_rows = $stmt->rowCount();

И используйте блок try - catch для ошибок.

0 голосов
/ 19 января 2012

Будет ли работать функция mysql_affered_rows () для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...