php mysqli受影响的行在删除语句后返回错误的结果

时间:2014-08-05 15:07:39

标签: php mysql mysqli

我有一个从表中删除一行的函数,如果以前存在该行,我想返回true。我使用以下函数实现:

$mysqli = $this->mysqli;

$stmt = $mysqli->prepare("DELETE FROM active_clients WHERE token LIKE ?");
$stmt->bind_param('s', $token);
$stmt->execute();
if($stmt->affected_rows < 1){
    $stmt->close();
    return false;
}
$stmt->close();
return true;

它也适用于我的本地主机,但当我转移到实时服务器时,它不会返回正确的结果。 affected_rows总是返回0,但该行应该被删除。怎么会这样? php版本可能有问题吗?我在本地5.4和实时服务器5.3上运行......或者它也可能与数据库或服务器配置有关吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

$mysqli = $this->mysqli;

$stmt = $this->mysqli->prepare("DELETE FROM active_clients WHERE token LIKE ?");
if(!$stmt){
    die('prepare() failed: ' . $mysqli->error);
}else{
    $stmt->bind_param('s', $token);

    if($stmt->execute()){
       $stmt->store_result();
        if($stmt->affected_rows < 0){
            $stmt->close();
            return false;
        }else{
            $stmt->close();
            return true;    
        }
    }else{
        die('execute() failed: ' . $mysqli->error);
    }


}

答案 1 :(得分:-1)

  

如果最后一个查询是没有WHERE子句的DELETE查询,则所有记录都将从表中删除,但此函数将在4.1.2之前的MySQL版本中返回零。

检查你的Mysql版本。

资源:http://php.net//manual/en/function.mysql-affected-rows.php