php中还不允许访问属性

m528fe3b  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(380)

我有一个简单的功能从我的数据库删除帐户。我把它写在下面

public function removeAccount($email) {
    $response = array('code' => 0, 'error' => false);
    $stmt = $this->conn->prepare("SELECT id FROM user WHERE email = ?");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $result = $stmt->get_result();
    if ($result->num_rows) {
        $user   =  $result->fetch_assoc();
        $id = $user['id'];
        $stmt->close();

        $stmt = $this->conn->prepare("DELETE FROM number_list WHERE user_id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->close();

        $stmt = $this->conn->prepare("DELETE FROM number_status WHERE user_id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->close();

        $stmt = $this->conn->prepare("INSERT INTO old_user(email,serial,premium) SELECT email, device_id, membership FROM user WHERE id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->close();

        $stmt = $this->conn->prepare("DELETE FROM user WHERE id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->close();

        if ($stmt->affected_rows) {
            $response["code"] = 1;
        }
    }

    return $response;
}

它给了我底线的警告

if ($stmt->affected_rows) {

我一直在寻找解决问题的方法,但不知道什么是错的,什么可以解决它。请检查一下,如果有人知道的话,请告诉我。谢谢。

63lcw9qa

63lcw9qa1#

造成这个错误的原因有很多,但我今天遇到的是一个我在任何地方都找不到的原因。
我有两(2)个相同的虚拟机运行的副本,他们都在以某种方式竞争,我不太明白解释,但进入virtualbox并关闭其中一个解决了问题。
我知道这是一个模糊的场景,但如果有人遇到同样的情况,我希望我的回答能阻止他们像我一样在上面浪费时间。

ergxz8rk

ergxz8rk2#

$stmt = $this->conn->prepare("DELETE FROM user WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
if($stmt->affected_rows > 0) { $response["code"] = 1; }
$stmt->close();

在本例中,我们检查了是否有行得到了更新。以下是 mysqli::$affected_rows 返回值。
-1-查询返回错误;冗余,如果已经有错误处理 execute() 0-没有更新的记录 UPDATE ,没有与 WHERE 子句或未执行任何查询
大于0-返回受影响的行数;相当于 mysqli_result::$num_rows 为了 SELECT

wko9yo5t

wko9yo5t3#

您正在尝试从关闭的语句中获取受影响的行数。而不是

$stmt->execute();
$stmt->close();
if ($stmt->affected_rows) {
    $response["code"] = 1;
}

使用

$stmt->execute();
$num_affected_rows = $stmt->affected_rows;
$stmt->close();
if ($num_affected_rows) {
    $response["code"] = 1;
}

相关问题