【问题标题】:MySQL error when submitting '' in an array在数组中提交“”时出现 MySQL 错误
【发布时间】:2012-01-31 15:29:39
【问题描述】:

我有一个 PHP 循环,它自动生成一个数组以插入到表中。但我得到这个错误:

Database query failed: Incorrect integer value: '' for column 'id' at row 1
Last SQL query: INSERT INTO users(id, email, password, first_name, last_name) VALUES ('', 'test@user.com', 'fljhdsfsd', 'John', 'Doe')

我尝试将 id 字段设置为 No Null 和 Null,但这没有帮助。

有什么想法吗?提前感谢您的帮助。

【问题讨论】:

    标签: php mysql loops


    【解决方案1】:

    如果您的 id 字段是自动递增的列,那么您可以简单地从 INSERT 查询中省略它。

    INSERT INTO users(email, password, first_name, last_name) 
    VALUES ('test@user.com', 'fljhdsfsd', 'John', 'Doe');
    

    将自动生成一个id

    【讨论】:

    • 唯一的问题是 SQL 查询是通过执行 CRUD 的对象动态生成的。它检查表中有哪些字段,并在给出数据时产生一个 INSERT。有时提交的数据不包含特定字段的值,这就是问题发生的地方。我想让 MySQL 原谅''。有什么想法吗?
    【解决方案2】:

    您的 Mysql 正在严格模式下运行。如果该列没有值,则必须传递NULL,如果该列是auto increment,则可以将该列排除在查询之外。 一旦尝试以下查询,我相信这会奏效。

    INSERT INTO users(id, email, password, first_name, last_name) 
    VALUES (NULL, 'test@user.com', 'fljhdsfsd', 'John', 'Doe')
    

    【讨论】:

    • 先生,我不知道 Nathan 是否将 ID 设置为表的主键,但通过在其上插入 NULL 值,如果他将 ID 设置为主键,会不会产生冲突错误?
    • @johntotetwoo:不,它不会产生任何错误,并且 auto_increment 列必须定义为键,因此它是主键。请不要使用sir。供您进一步阅读的参考链接dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
    • NULL 返回同样的问题。如果我传入“0”它可以工作,但问题是我不能总是为这个查询传入一个值。没有别的办法吗?
    • @Nathan:这可能是因为您将NULL 括在双引号或单引号中。请注意,NULL 不等于 "NULL"。是的,还有其他方法,你必须关闭mysql严格模式。
    • 关闭严格模式时,性能和安全方面的权衡是什么?
    【解决方案3】:

    如果 id 字段是自动递增的,您可以跳过该字段。如果不是,则读取错误,它会显示“整数值不正确”,并且您给出的 '' 女巫是字符串。在这种情况下,在每次插入之前,您应该从数据库中获取最大 id 并增加它,或者使用任何其他 ID 生成。

    【讨论】:

      【解决方案4】:

      这是因为您在数据库中的 id 字段现在只包含整数值。并且空白不是整数值。只需更改数据库上的数据类型即可。

      只需将您的数据类型 ID“integer”更改为“varchar”,勾选“auto increment”并在数据库中输入类似“250”的长度字段,然后运行您的查询。

      【讨论】:

      • 请去掉AI(自动增量)选项,因为varchar不带AI
      • 您不能将 NULL 放在您的自动增量字段上
      猜你喜欢
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 2011-07-28
      相关资源
      最近更新 更多