2016-07-11 1 views
1

Вот мой код:Как убедиться, что запрос на удаление удаляет строку?

$token = $_GET['validate_activate']; // it's something like this "98j34f0j043f094f98325r" 
$user_id = $_GET['user_id']; 

// db connection here 
$stmt = $dbh->prepare("DELETE FROM activate_token WHERE token = :token"); 
$stmt->execute(array(':token' => $token)); 

if (/* deleting is success */) { 
    // activating the user 
} else { 
    // your token is invalid 
} 

Ну, как я могу сделать правильное условие для этого if заявления?

+0

или использовать 'select count' +' fetchColumn' – Ghost

ответ

0

С помощью rowCount();

PDOStatement :: ROWCOUNT() возвращает количество строк, пострадавших от последней DELETE, INSERT или UPDATE заявление, выполненных с помощью соответствующего объекта PDOStatement.

if ($stmt->rowCount()) { 
    // activating the user 
} else { 
    // your token is invalid 
} 
+0

За исключением случаев, когда это [привинчивается] (http://stackoverflow.com/a/1314865) – Drew

+0

hello @Drew есть ошибка в более новых версиях? Не использовали PHP в течение нескольких лет – e4c5

+0

Если он работает на вашем развертывании и хорошо протестирован, ваш метод - это то, с чем я буду работать. Это просто, когда вы нажимаете свой код вокруг, он зависит от настройки в действии. Из руководства: [не гарантировано] (http://php.net/manual/en/pdostatement.rowcount.php) – Drew

0

Это должно работать, оператор п.д.о. должен возвращать Верно или неверно, если запрос на удаление был успешно

if($stmt->execute(array($token = $_GET['validate_activate']))) { 
    // activating the user 
} else { 
    // your token is invalid 
} 
+0

Это может быть успешным и не удалять строку. –

+0

Предполагая, что id является 'unsigned' (0 или больше),' DELETE FROM table WHERE id = -1; 'будет возвращать' true' – fyrye

0

$stmt->execute возвращает результат BOOL, правда, если запрос SQL был успешным, так просто использовать результат того, что в вашем заявлении, если:

$stmtWorked = $stmt->execute(array($token)); 
if ($stmtWorked) { 
    // activating the user 
} else { 
    // your token is invalid 
} 

Также вы можете использовать mysqli_stmt_affected_rows() рассчитывать на многие строки были удалены, если вам нужно знать определенную сумму.

+0

Похоже, что вопрос на самом деле о pdo ... –

Смежные вопросы