gpt4 book ai didi

php - 如何在 laravel 4/cartalyst sentry 中调试插入异常

转载 作者:行者123 更新时间:2023-11-28 23:57:58 24 4
gpt4 key购买 nike

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

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

异常:

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 上运行

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

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

最佳答案

看来您的问题出在 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

祝你好运!

关于php - 如何在 laravel 4/cartalyst sentry 中调试插入异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com