версия PHP: 5.2.17
Версия CakePHP: 1.3.11
Версия MySQL: 5.5.9
Я работаю над очень простым внутренним сайтом доски объявлений для клиента. Поскольку он предназначен только для внутреннего использования, клиент запросил, чтобы вместо имен пользователей и паролей был только пароль. Нет имен пользователей. Существует один пароль для администратора и другой пароль для всех остальных.
Вот структура базы данных:
CREATE TABLE `messages` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`date` date DEFAULT NULL,
`time` time DEFAULT NULL,
`from` varchar(255) DEFAULT NULL,
`to` varchar(255) DEFAULT NULL,
`subject` varchar(255) DEFAULT NULL,
`regards` varchar(255) DEFAULT NULL,
`memo` text,
`deleted` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ;
CREATE TABLE `passwords` (
`id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT,
`password` varchar(40) NOT NULL,
`is_admin_password` char(1) DEFAULT 'N',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
Это моя модель "Пользователь":
class User extends AppModel {
var $name = 'User';
var $useTable = 'passwords';
}
Сейчас я работаю над частью веб-сайта «Изменить пароль», которая доступна только администратору. Форма имеет выпадающее меню, в котором они выбирают, какой пароль они меняют, а затем они должны ввести текущий пароль, новый пароль и подтвердить новый пароль.
Как только администратор отправляет форму «Изменить пароль», контроллер проверяет, какой пароль он изменяет, и затем ищет этот пароль в базе данных, чтобы убедиться, что он ввел правильный текущий пароль. Это код, который ищет пароль:
$this->User->findById($this->data['User']['id'])
По какой-то причине это SQL, сгенерированный CakePHP , независимо от того, на что установлена переменная $this->data['User']['id']
(до тех пор, пока она является строкой) :
SELECT `User`.`id`, `User`.`password`, `User`.`is_admin_password` FROM `passwords` AS `User` WHERE `User`.`id` = 1 LIMIT 1
Почему он всегда ищет идентификатор 1, даже когда я говорю ему искать идентификатор 2? Я также попытался изменить «findById» на обычный «find», и это ничего не изменило. Кажется, это только когда я использую поле "id" в качестве условия. Почему это происходит?