【问题标题】:how do I give out incrementing keys to client side from php and mysql ?如何从 php 和 mysql 向客户端提供递增的密钥?
【发布时间】:2012-09-28 06:47:58
【问题描述】:

我有一张简单的桌子

CREATE TABLE `keys` (
`IDkey` int NOT NULL auto_increment,
`username` varchar(50) NOT NULL, 
PRIMARY KEY  (`IDkey`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

并在用户使用我的 webapp 调用时向他们提供递增的整数键“IDkey”。我还将他们的用户名存储在表中。

我有两个问题一直困扰着。

第一个问题:目前我正在执行以下操作以给出密钥,有没有办法将其组合成一个查询?

INSERT INTO keys VALUES (NULL, '$username');
SELECT IDkey FROM keys WHERE username='$username';

第二个问题:密钥过期,因此同一用户可能会返回新密钥,但这会导致问题,因为他们的用户名已经在数据库中。有没有办法编写我的 SELECT 查询,以便返回该用户的最新记录?

【问题讨论】:

  • 访问此链接希望它可以帮助您提出想法:stackoverflow.com/questions/5391344/mysql-insert-with-select
  • 我阅读了链接。因此,如果我删除了分号并合并了两个查询,那么它会读取 INSERT INTO keys VALUES (NULL, '$username') SELECT IDkey FROM keys WHERE username='$username';那么它会返回新创建的 IDkey 吗?

标签: php mysql


【解决方案1】:

如果您使用的是PDO,请查看PDO::lastInsertId()

如果您使用的是mysqli,请查看mysqli::$insert_id

如果您使用的是mysql,请将您的代码升级为使用PDOmysqli。 ;-)(但说真的,你可以用mysql_insert_id() 做到这一点)。

【讨论】:

  • 我担心如果 20 个用户同时请求 mysqli::$insert_id 可能会返回错误的记录,因为它返回最新的记录而不检查用户名。我想我不知道服务器是按顺序运行还是并行运行我的脚本。如果它一次处理每个调用,那么它当然会返回正确的记录,因为它是最近的记录。但是,如果服务器同时为调用执行代码,则可能会在您建议的请求之前插入几条记录。请指教
  • @PrimeLens:每个数据库连接都是它自己的会话。只要您的代码在进行另一次插入之前检索插入 ID,就可以了。
【解决方案2】:

插入此记录后立即调用此函数 mysql_insert_id()。它会给你最后插入记录的 id。

【讨论】:

  • 回复drrcknisn的回答,因为它是同一主题,谢谢你发帖
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 2021-01-05
  • 1970-01-01
  • 2019-02-07
  • 2016-05-27
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多