Если "запрос не работает", это может быть вызвано следующими причинами:
- До выполнения запроса дело вообще не дошло, из-за некорректной логики в коде программы. Чтобы это проверить, надо добавить временный отладочный вывод (или использовать пошаговую отладку в IDE)
- При выполнении запроса произошла ошибка. Необходимо настроить РНР так, чтобы он сообщал обо всех ошибках, в том числе при работе с БД. См. рекомендации в этом ответе.
В случае, если запрос был выполнен, и при этом без ошибок, но при этом не сделал то что нужно, причины могут быть следующие:
- Не было найдено совпадение в условии WHERE. Надо проверять входящие данные, и данные, которые лежат в БД.
- Если запрос на изменение данных, то иногда бывает, что результат запрса проверяют не в той базе данных. Например, phpmyadmin работает с БД, которая настроена на порт 8889, а РНР работает с БД на порту 3306. Надо убедиться, что результат запроса проверяется в той же самой БД.
- Как вариант, изменения происходят в рамках открытой транзакции, которой потом не делают commit. Надо убедиться, что транзакция не стартует или что она подтверждается.
Для данного случая можно предложить настроить РНР и PDO, чтобы они информировали программиста об ошибках, как оказано по ссылке выше, и добавить следующий отладочный код:
var_dump($login, $password, $id);
$st = $this->db->prepare("UPDATE users SET login = ?, password = ? WHERE id = ?");
$st->bindParam(1, $login, PDO::PARAM_STR);
$st->bindParam(2, $password, PDO::PARAM_STR);
$st->bindParam(3, $id, PDO::PARAM_INT);
$st->execute();
die("Запрос выполнен");
И смотреть на то, что он выведет.
- если ничего не выведет, то значит этот метод даже не был вызван. Гадо добавлять отладочный вывод выше по коду и разбираться с логикой. Например, код проверяет какой-то параметр из формы, а он не пришел, или написан с опечаткой
- если выведет ошибку, то прочитать и исправить её
- если выведет id, то проверить, есть ли такое значение в БД
После решения проблемы добавленные строки убрать.