【问题标题】:CakePHP 3.2 find query issueCakePHP 3.2 查找查询问题
【发布时间】:2016-03-02 23:11:29
【问题描述】:

这是我在 CakePHP 3.x 中的查询

public function confirmation($token){
    $result = $this->Users->findAllByVerificationCode($token);
    debug($result->first());
    die(); 
}

如果变量 $token 太长,结果总是null,但如果我把它变短,我会得到一个结果。

发生了什么事?

【问题讨论】:

    标签: php cakephp-3.2


    【解决方案1】:

    检查数据库架构。您的令牌字段可能对于您要放入其中的数据来说太小,并且令牌被截断。

    【讨论】:

    • 我已经检查了我的数据库,我尝试使用 find 条件,我也写了 sql 查询但结果总是为空,但每次我尝试使用短 $token 时都会得到结果。
    • debug($result) 向我展示了 sql 查询,一切都是正确的,$tokenverification_code 的值都是相同的。但结果总是null
    • 这对我来说仍然像是一个截断问题(假设您使用的是 MySQL)。您保存的最长令牌是多长时间?以及底层数据库字段是什么数据类型和长度?
    • 问题解决了,我没有注意到我的数据库中的变量类型,它是一个整数,token也是数字的组合,但类型是字符串。
    • 通常这会起作用(如您所知,因为它适用于您使用较小的令牌)但 MySQL 数字数据类型的长度存在特定限制,这会使较长的数字字符串在存储时被截断。在这种情况下,您需要考虑使用更大的整数类型(例如 unsigned bigint)或适当大小的 varchar。很高兴您的问题得到了解决,如果我的回答有帮助,请将其标记为已接受。
    【解决方案2】:

    问题解决了,$tokenverification_code 是相同的,都是数字的组合,但其中一个是String 类型,另一个是Integer,CakePHP 不会转换自动输入。

    【讨论】:

    • 请参阅我的回答中的 cmets。问题不在于数据类型不同,而在于数据类型不足以容纳整个令牌,因此令牌被截断,如我的回答所示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多