PHP SLIM DELETE问题得到总是成功的信息
问题描述:
当我运行这个脚本时,即使id不存在并且没有记录受到影响,我总是会得到成功消息"successfully deleted"
。任何想法为什么?我怎样才能解决这个问题?PHP SLIM DELETE问题得到总是成功的信息
$app->post('/api/delete', function(Request $request, Response $response) {
$id = $request->getParam('id');
$sql = "DELETE FROM test WHERE id=:id";
try{
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
echo '{"notice": {"text": "successfully deleted"}}' ;
} catch(PDOException $e){
//echo '{"error": {"text": '.$e->getMessage().'}}';
return $response->withStatus(400)->write('{"error": {"text": '.$e->getMessage().'}}');
}
});
答
需要使用rowCount()有: -
$app->post('/api/delete', function(Request $request, Response $response) {
$id = $request->getParam('id');
$sql = "DELETE FROM test WHERE id=:id";
try{
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$count = $stmt->rowCount();
if($count >0){
echo '{"notice": {"text": "successfully deleted"}}' ;
}
} catch(PDOException $e){
//echo '{"error": {"text": '.$e->getMessage().'}}';
return $response->withStatus(400)->write('{"error": {"text": '.$e->getMessage().'}}');
}
});
答
try{
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $id);
$query=$stmt->execute();
if($query)
echo '{"notice": {"text": "successfully deleted"}}' ;
else
echo '{"notice": {"text": "Some Error Occured"}}' ;
} catch(PDOException $e){
//echo '{"error": {"text": '.$e->getMessage().'}}';
return $response->withStatus(400)->write('{"error": {"text": '.$e->getMessage().'}}');
}
只要执行查询时,它不会抛出异常。在你的情况下,它成功执行,并且它影响了0行。 –