php - CakePHP:findById 返回不正确的行?

标签 php mysql sql cakephp

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';
}

我现在正在处理网站的“更改密码”部分,只有管理员可以访问。该表单有一个下拉菜单,他们可以在其中选择要更改的密码,然后他们必须输入当前密码、新密码并确认新密码。

管理员提交“更改密码”表单后, Controller 会检查他们正在更改的密码,然后在数据库中查找该密码以验证他们输入的当前密码是否正确。这是查找密码的代码:

$this->User->findById($this->data['User']['id'])

出于某种原因,这是由 CakePHP 生成的 SQL,无论 $this->data['User']['id'] 变量设置为什么(只要因为它是一个字符串):

SELECT `User`.`id`, `User`.`password`, `User`.`is_admin_password` FROM `passwords` AS `User`   WHERE `User`.`id` = 1    LIMIT 1

为什么它总是在查找 ID 1,即使我告诉它查找 ID 2?我还尝试将“findById”更改为常规“查找”,但没有任何改变。好像只有当我使用“id”字段作为条件时。为什么会这样?

最佳答案

您的密码表的 id 字段定义为 tinyint(1),即它只能是 0 或 1。CakePHP 做对了。

关于php - CakePHP:findById 返回不正确的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395747/

相关文章:

c# - 如何在插入或更新表时检查表中是否已存在行或列

php - 从 MySQL 中按月和年分组的时间戳列中获取记录

php - 相同参数中的 JSON_PRETTY_PRINT 和 JSON_UNESCAPED_SLASHES

mysql - 数据库表可以没有主键吗?

MySQL - 如何在没有 max、min、join、union 等的情况下找到等级最高的人

sql - 将数值转换为数据类型数值时出现算术溢出错误

php - 如何根据同一 SELECT 中的不同 ID 从表中获取两个值

php - 在XAMPP中打开phpmyadmin时出错

mysql - 如何选择下个月的数据

javascript - php 重新加载动态网站后不回显 sql 表