MYSQL delete语句删除太多行

问题描述 投票:0回答:1

我在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";
        }

当我这样做时,它会删除太多用户。我尝试根据电子邮件而不是UID进行删除,它删除了所有用户。

php mysql sql firebase-authentication sql-delete
1个回答
1
投票

这里:

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

您将参数绑定为整数,而显然它是一个字符串。这会生成一连串的隐式转换,最终会删除您想要的更多行。

相反,您想要:

$memberDelete->bindParam(':uid', $uid, PDO::PARAM_STR);
© www.soinside.com 2019 - 2024. All rights reserved.