簡體   English   中英

MYSQL delete 語句刪除了太多行

[英]MYSQL delete statement deletes too many rows

我的 MYSQL 數據庫中有一個用戶表,如下所示:

CREATE TABLE `myDatabase`.`user` ( 
`id` INT NOT NULL AUTO_INCREMENT , 
`login` VARCHAR(250) NOT NULL ,
`uid` VARCHAR(250) NOT NULL , 
`email` VARCHAR(250) NOT NULL , 
`user_type` VARCHAR(250) NOT NULL , 
PRIMARY KEY (`id`)) ENGINE = InnoDB;

uid 由 firebase 在用戶登錄時提供(如 3LmgcBeCUNW1lfMKCQcoI8Xkxai1 或 DrFblVatVdacokhcQCuwb8DK13q1 等字符串。

我的項目有一個調用查詢的刪除用戶選項:

public function deleteProfile($uid) {
            $memberDelete = $this->_db->prepare("DELETE FROM user WHERE uid = :uid");
            $memberDelete->bindParam(':uid',$uid,PDO::PARAM_INT);
            $resp = $memberDelete->execute();
            if(!$resp) {
                throw new PDOException('member couldn't be removed');
            }
            $memberDelete->closeCursor();
            return "member successfully removed";
        }

當我這樣做時,它會刪除太多用戶。 我嘗試基於 email 而不是 UID 刪除,它刪除了所有用戶。

這里:

$memberDelete->bindParam(':uid', $uid, PDO::PARAM_INT);

您將參數綁定為 integer,而顯然它是一個字符串。 這會生成一系列隱式轉換,最終會刪除您想要的更多行。

相反,你想要:

$memberDelete->bindParam(':uid', $uid, PDO::PARAM_STR);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM