【问题标题】:Field 'x' doesn't have a default value in PHP 7 version字段“x”在 PHP 7 版本中没有默认值
【发布时间】:2017-11-30 05:26:57
【问题描述】:

我遇到了一个错误

#1364 - 字段 'login_count' 没有默认值

最近将php 5.5升级到php 7。升级后显示错误。我有下面的表格列。
firstname,middlename,lastname,username,password,email,mobile,added_date,login_count,@9876543 /p>

当我在表中插入数据时出现错误。

INSERT INTO `js_simple`
       (`firstname`, `middlename`, `lastname`, `username`, `password`, `email`, 
        `mobile`, `added_date`) 
VALUES ('Kjhjkh', 'Jkjhjkhk', 'Jkhkjhj', 'jkhjkh', 'khkjh', 'njhjhjkh@gmail.com', 
        '1122335566', '2017-11-29 22:59:49')

#1364 - 字段 'login_count' 没有默认值

此处login_countstatus 字段未插入且表中的默认值不为空。

在升级到 php7 之前它正在工作。谁能帮我解决这个问题。

【问题讨论】:

  • 为它设置一个默认值,这是由于你的mysql中定义的STRICT_TRANS_TABLES SQL模式
  • js_simpleCREATE TABLE 定义是什么?看起来 login_count 没有定义默认值,这意味着您必须为其提供 INSERT 语句。
  • 是的 绝对正确你的答案,但我怀疑它的以前版本是如何工作的,而在INSERT 声明中没有给出默认值?谢谢...

标签: php mysql


【解决方案1】:
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';

请注意,您必须具有 root 权限。

解释:

严格模式控制 MySQL 如何处理数据更改语句(如 INSERT 或 UPDATE)中的无效或缺失值。一个值可能由于多种原因而无效。例如,它可能具有错误的列数据类型,或者可能超出范围。当要插入的新行不包含在其定义中没有显式 DEFAULT 子句的非 NULL 列的值时,缺少值。 (对于 NULL 列,如果缺少值,则插入 NULL。)严格模式也会影响 DDL 语句,例如 CREATE TABLE。 (来源和更详细的信息:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict

关于查询 - 它将 SQL 模式更改为 NO_ENGINE_SUBSTITUTION,即:

当 CREATE TABLE 或 ALTER TABLE 等语句指定了禁用或未编译的存储引擎时,控制默认存储引擎的自动替换。(来源:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_engine_substitution

换句话说,当给出禁用所有替换的命令时,严格模式被禁用,特别是严格模式引擎。

请注意,理想情况下,开启严格模式是一种很好的做法,因为它可以帮助开发人员创建一个完美运行的系统并很好地减少服务器负载。但它在某些情况下会产生错误,在调试过程中可能会遗漏,从而在用户偶然发现这些错误时“破坏”整个应用程序。

【讨论】:

    猜你喜欢
    • 2016-03-22
    • 2022-07-27
    • 2018-12-24
    • 2012-09-25
    • 2018-03-19
    • 2014-11-09
    • 2015-07-07
    • 2019-11-22
    • 2018-07-29
    相关资源
    最近更新 更多