【问题标题】:How to debug insert exception in laravel 4 / cartalyst sentry如何在 laravel 4 / cartalyst sentry 中调试插入异常
【发布时间】:2015-09-08 14:32:46
【问题描述】:

我接手了一个用 Laravel 4 编写的项目。有两个系统(开发和生产)基本上应该做同样的事情。

当我尝试注册用户时(使用的软件包是 cartalyst/sentry),它可以在生产环境中使用。在开发环境中,它失败了,因为有些列定义为非空,并且代码中没有设置它的语句。所以我理解它为什么会失败,我不明白为什么它可以在另一台机器上工作,以及我可以对 dev 进行什么样的调整来让它工作。无需更改 db-columns(我想在进行此类更改之前了解系统)。

例外:

SQLSTATE[HY000]: General error: 1364 Field 'auto_token' doesn't have a default value 
(SQL: insert into `users` (`first_name`, `last_name`, `display_name`, `email`,  
`password`, `updated_at`, `created_at`) values (?, ?, ?, ?, ?, ?, ?)) (Bindings: array ...

注册新用户的代码:

        $user = Sentry::register(array(
            'first_name' => Input::get('first_name'),
            'last_name'  => Input::get('last_name'),
            'display_name'=> Input::get('display_name'),
            'email'      => Input::get('email'),
            'password'   => Input::get('password'),
        ));

数据库架构:

id (unsigned int, not null)
first_name (varchar, not null)
last_name (varchar, not null)
display_name (varchar, not null)
email (varchar, not null)
password (varchar, not null)
auto_token (varchar, not null)
... more columns like auto_token

产品:MySQL 5.5.42 - PHP 5.4.30 - 在 Linux 上运行

开发:MySQL 5.6.21 - PHP 5.4.30 - 在 Windows 上运行

我知道查询一开始就不应该成功运行,数据库模式通常是有缺陷的。我想了解导致此问题的原因以及如何解决此问题。

我被卡住的地方是为什么在一个系统上它可以工作,而在另一个系统上却不行。有人知道方向吗?

【问题讨论】:

    标签: php mysql exception laravel-4 cartalyst-sentry


    【解决方案1】:

    看起来您的问题出在 MySQL 配置中。为避免这些错误,您必须禁用 MySQL 严格模式。

    找到my.cnfmy.ini 配置文件并从sql-mode 值中删除STRICT_TRANS_TABLES

    例如编辑前:
    sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

    编辑后:
    sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

    你必须在保存配置文件后重新启动mysql,一切可能会按预期工作。

    另一方面,禁用“严格模式”是一种不好的做法,最好编辑迁移并在适当的位置添加 nullabledefault

    祝你好运!

    【讨论】:

    • 太棒了,1 个答案 - 准确无误。谢谢,有时我想知道这个星球上怎么会有人知道这些事情......
    • 不客气。没什么神奇的,因为我以前多次遇到同样的问题 :) 现在你也可以在其他人遇到类似问题时帮助他们。
    猜你喜欢
    • 1970-01-01
    • 2013-08-19
    • 2014-01-26
    • 2011-10-24
    • 1970-01-01
    • 2014-09-13
    • 2020-10-26
    • 2014-06-15
    • 2021-05-15
    相关资源
    最近更新 更多