【问题标题】:php manual increment membership nophp手动增加会员编号
【发布时间】:2011-04-18 12:23:03
【问题描述】:

我有数百人加入我的网站并为他们创建会员 ID。我刚刚在数据库中创建了一个名为user_no 的新列。

  • 增加会员编号的mysql查询是什么。
  • 是否可以以 AE 开头,然后是数字,即:AE0001、AE0002、...。它以 4 个数字开头,而不是 AE1、AE2..

mysql查询:

UPDATE user SET user_no=..??

在 PHP 方面,我如何增加它?如果有新成员加入。

$db->query("INSERT INTO user (user_no) VALUES(AE'$user_no')");

【问题讨论】:

  • 你为什么不直接使用 MySQL 的 auto_increment 特性呢?为什么要创建自己的计数器?如果可以在通过php输出成员的ID时将“AE”附加到数据库本身的数字上,为什么还要附加?背后的原因是什么?
  • 为什么不使用auto_incrementing 主键列?
  • 你的意思是要给每个用户一个特定的id?
  • @Michael:是否可以以自动增量的四个数字开头?即:0001、0002?
  • @boyee:那为什么不用那个号码/id 作为你的会员号呢?

标签: php mysql auto-increment


【解决方案1】:

为什么不使用自动增量字段并将 AE 附加到它?自动增量将由 MySQL 执行,因此您不必担心在 PHP 中:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

并以AE0001 的格式显示您的用户密钥,您可以这样做

$id = 'AE' . str_pad($autoincrementid, 5, "0", STR_PAD_LEFT);

http://php.net/manual/en/function.str-pad.php

【讨论】:

  • 鉴于 OP 希望 user_no 字段与主键 ID 具有相同的值,那么这可能是正确的解决方案。您还可以使用sprintf() 来格式化字符串。但请注意不要将其填充得太短——使用上述格式,只有 10000 个用户后您将用完空间。听起来很多,但如果您的网站成功,可能不会花很长时间,而且以后修复可能会很痛苦。
  • @Spudley,当然。我只将它填充到 5,因为 OP 提到了AE0001。一旦达到 10k,您根本不应该填充它
【解决方案2】:

我同意其他人的观点,即您应该简单地使用 MySQL 自动增量功能。这就是它的用途。

可以自己编写,可能使用 MySQL 的 MAX() 函数来查找表中当前字段的最大值。但是,除非您使用一些非常健壮的事务代码,否则当两个用户同时创建帐户时,这种方法总是存在导致创建重复记录的危险。

避免这种情况所需的代码量并不小,如果您没有足够的经验看不到使用自动增量的好处,那么您不太可能做对。

自动增量的全部意义在于让您不必每次都实现所有代码。

此外,出于性能原因,强烈建议您为主键使用整数值。当然,您可以将其显示为"AE" . $id,但您应该将其作为整数存储在数据库中。

【讨论】:

  • @Spudley:谢谢 :) 我同意了!我刚刚获得了另一个用于不同目的的 uniq id。
  • @boyee007 -- 您希望user_no 编号与前面带有“AE”的记录的主ID 相同,还是完全独立的序列?
  • @Spudley:是的,他们应该是同一个 id!不同之处在于:它以“AE”和 4 个数字开头。好吧..可以在php端附加AE或者最好的方式。有什么好的解决办法吗?
  • 我犯了@Spudley 所指的错误,我可以告诉你这不好玩!
  • @boyee - 是的,正如你所说,使用 PHP 追加;我建议遵循@JohnP 的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多