我有一个从表中删除一行的函数,如果以前存在该行,我想返回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上运行......或者它也可能与数据库或服务器配置有关吗?
答案 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