【问题标题】:PHP + SQLi - Auto incrementing ID'sPHP + SQL - 自动递增 ID
【发布时间】:2015-07-05 22:18:32
【问题描述】:

我遇到了一个问题,在我的 PHP 中,出于某种原因,我必须定义 ID 是什么,否则我会收到“死亡”消息,即使表结构设置为自动递增,这是我的 PHP :

$query = mysqli_query($link, "INSERT INTO users (username, email, passhash, reg_ip, reg_date, salt)VALUES('$username','$email','$pass1','$ip_address',now(),'$salt')") or die("Could not create your account, please try again later.");

ID 目前不在该代码中,如果我要这样做,它也不起作用:

$id = 1;

然后将其添加到插入中,它可以工作,由于某种原因我也无法将其设置为 NULL。

结构:bigint、无符号、自增、主键。

【问题讨论】:

  • 你在建表的时候定义了id为“AUTO_INCREMENT”吗?
  • 生成什么mysql错误?使用 mysqli_errno 和 mysqli_error 来获取错误。
  • 是的,在 phpmyadmin 上勾选了 A_I。
  • 我会在代码中的哪个位置放置“mysqli_error”?刚刚在插入下面试了一下,没有读到任何错误。
  • 你会用它替换或死亡。

标签: php mysql auto-increment


【解决方案1】:

当您达到限制时,将自动增量值重置回 1。

ALTER TABLE users AUTO_INCREMENT = 1 ;

【讨论】:

  • 好吧,就像其他人建议的那样,您没有在数据库表上设置 auto_increment 值。如果您能够运行此查询,请提供输出。 select * from INFORMATION_SCHEMA.tables where table_name = 'users';
  • 对于自动增量,它返回:18446744073709551615
  • 这就是问题所在,您已经达到了最大 auto_increment 值,请尝试将其重置为 1 ... mysql 然后会将其设置为最低值。
【解决方案2】:

如果你像这样修改你的查询:

INSERT INTO users (id ,username, email, passhash, reg_ip, reg_date, salt)
VALUES            (null,'$username','$email','$pass1','$ip_address',now(),'$salt') 

尝试这种方式,它应该将 id 添加为自动增量。

【讨论】:

  • 您也可以从查询中完全删除 id 并将 null 作为“值”
  • 除了为 ID 设置了 null 之外,这不一样吗?我已经尝试过 null ,就像我上面说的那样,仍然得到 die 消息。也试过没有定义ID,不行。
  • 如果 id 是一个 auto_increment 列,那么如果你将它插入为 null 或者你根本没有提及它,应该不会有任何错误。检查你的表结构,上面的例子不起作用。
  • id bigint(4) UNSIGNED NOT NULL AUTO_INCREMENT
  • 如果你有这样的东西: CREATE TABLE new_table ( id bigint(4) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ) 你可以用这个插入值: insert into new_table values() --没有任何字段或值声明,或者您可以使用:插入 new_table (id) 值 (null),或者您可以只使用 insert into new_table 值 (null) - 它们都有效。
猜你喜欢
  • 2018-08-06
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 2021-04-25
  • 2011-01-31
  • 2010-10-04
  • 2015-03-10
  • 1970-01-01
相关资源
最近更新 更多