php - MYSQL删除语句删除太多行

标签 php mysql sql firebase-authentication sql-delete

我的 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 进行删除,结果删除了所有用户。

最佳答案

这里:

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

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

相反,您想要:

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

关于php - MYSQL删除语句删除太多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424006/

相关文章:

mysql - 将多行转换为列

mysql - 错误 1452 : Cannot add or update a child row

mysql - 当值更改时选择 sql 行

sql - PostGIS:多面体的边界框

sql - 数据库设计 : replace a boolean column with a timestamp column?

php - 删除行后MySQL重新排列auto_increment

php - 绑定(bind)变量的数量与 token 的数量不匹配

php - WordPress 插件中一个类的多个实例

php - 如何对数据表进行分页以便数据不会在 Laravel 中一起加载?

mysql - Magento:根据价格更改类别中的产品位置