【问题标题】:Capturing the auto-increment value and storing it with query捕获自动增量值并将其存储在查询中
【发布时间】:2012-05-15 15:07:01
【问题描述】:

我有一个自动递增的消息表,我只是希望能够捕获自动递增的 ID 号并将其与随机生成的代码一起存储。然后,我将使用此代码吐出整个页面。例如,假设用户刚刚更新了一条新消息,并且自动递增消息 ID 是 429。我希望能够存储该 429 并在末尾添加一个 5 位代码,以便消息自动获取 429 ID,但也在其列中有一个标识符,其代码类似于 429mUwIz。

然后,我将拥有一个公共页面,该页面将获取该代码并显示特定消息。因此,如果您访问 www.example.com/429mUwIz,它会显示您输入的消息。我显然需要 5 个随机生成器,因此用户不能直接访问 www.example.com/1、www.example.com/2 并滥用系统。

那么,想出这样一个代码的最佳方法是什么,我知道 mysql_insert_id 不起作用,因为我需要与插入一起存储的 ID。

附件是 Path 如何创建这样一个系统的一个例子。如果有帮助,他们的信件也区分大小写。

https://path.com/p/2BTxys

谢谢。

编辑:创建这个随机 5 键代码的最佳方法是什么。对不起。

【问题讨论】:

  • 也许使用mysql_insert_idphp.net/manual/en/function.mysql-insert-id.php
  • RobertPitt stackoverflow.com/questions/5422065/…已经回答了这个问题
  • @Pushpesh 你读过这个问题吗?
  • 作为一种通过更改 URL 来阻止随意尝试浏览邮件的快速方法,您是否考虑过确保将 REQUEST 中的 HTTP_REFERER 字段设置为您网站上的页面?如果有人更改了 URL 中的 ID,则该字段为空,但如果他们点击链接,就可以了……这并不完美,但它会使随意浏览变得不可能。
  • @andrewsi 从未想过这一点,感谢您的建议。还要感谢 Paolo_NL_FR 的链接,一定会调查的。

标签: php mysql


【解决方案1】:

你可以查询

$r = mysql_query("SHOW TABLE STATUS LIKE 'table_name' ");
$row = mysql_fetch_array($r);
$Auto_increment = $row['Auto_increment'];

这将检索下一个自动增量 id ...docs for SHOW TABLE STATUS here

并生成一个 5 字符的随机字符串使用

$rand = substr(md5(microtime()),rand(0,26),5);

使用microtime()md5 生成哈希,然后随机抓取5个字符.....它不需要是唯一的,因为您正在使用自动递增ID...

【讨论】:

    【解决方案2】:

    您可以避免这种情况,我的意思是,您不必将 AUTO_INCREMENT id 存储在随机代码中。将随机代码单独存储在自己的列中,然后在用户询问页面时检查它。如果 ID 和随机码不匹配,则不显示该页面。

    目前,我可以假设您正在使用以下方式查询路径:

    SELECT * FROM Paths WHERE key = '429mUwIz'
    

    但这完全等同于:

    SELECT * FROM Paths WHERE id = '429' AND key = 'mUwIz'
    

    您只需从 URL 中拆分 ID 和 KEY。您可以将所有数字视为 ID 部分,将所有字母视为 KEY 部分。

    【讨论】:

    • 我想过这个,但我怎么能确定随机生成的代码不是重复的?我知道例如只有字母和 5 个字符的代码会生成近 1200 万个组合,但这些基本上是状态更新,我总是可以生成重复的,不是吗?
    • @user1011713 为什么你必须确保它不是重复的?使用ID: 429, KEY: mUwIzID: 429, KEY: 429mUwIz 记录有什么区别。没有任何。您只需更改访问数据的查询(请参阅答案编辑)。
    • 我明白你的意思。感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多