MYSQL оператор delete удаляет слишком много строк - PullRequest
2 голосов
/ 25 апреля 2020

У меня есть таблица для пользователей в моем MYSQL db, например, так:

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 или DrFblVatVdacokhcQ1300 * 100 * 100 * 100). * Мой проект имеет опцию удаления пользователя, которая вызывает запрос:

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, и он удалил всех пользователей .

1 Ответ

4 голосов
/ 25 апреля 2020

Здесь:

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

Вы связываете свой параметр как целое число, хотя, очевидно, это строка. Это создает цепочку неявных преобразований, которая в итоге удаляет больше строк, которые вы намереваетесь.

Вместо этого вы хотите:

$memberDelete->bindParam(':uid', $uid, PDO::PARAM_STR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...