【问题标题】:Generating vouchers using md5?使用 md5 生成凭证?
【发布时间】:2015-03-12 18:58:42
【问题描述】:

这里是新的。 我正在尝试生成 100000 张凭证并将它们发送到数据库。这是我的代码:

<?php
set_time_limit(5400);
ini_set('memory_limit', '2048M');
$connection = mysql_connect("...", "...", "...");
$db = mysql_select_db("...", $connection);

$postdata = file_get_contents("php://input");
$request = json_decode($postdata);

for ($i=0;$i<100000;$i++){
    $voucher = substr(md5($i), 0, 6);
    $query = mysql_query("insert into voucher(nr_voucher) values ($voucher)");
}
    mysql_close($connection);

?>

结果是错误的行数(当使用 1000 进行测试时,它返回 67 行)和奇怪的 hexa,md5 的前 6 位不应该是,如“2.8e21”和“0”。 任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 很明显,它将十六进制值转换为数字,就好像它是一个字符串,而不是一个十六进制值。例如,285e19(您的凭证值之一)正在变为 2.8e21。同样,b70683 将变为 0,因为 b 不是数字开头的有效方式。我建议将 nr_vouicher 设为 char(6) 字段并插入“$voucher”。
  • 最好将您的归档类型更改为 varchar 并将长度设置为 60 并使用事务命令。如果执行 all 将执行,否则将执行注释。

标签: php mysql md5


【解决方案1】:

SELECT CONV('123ab', 16, 10) --> 74667

这是从十六进制转换为十进制的一种方法。

请注意,将 100000 个 24 位“随机”数字转换为十进制时,您很可能会得到一些重复。它不会像你得到的那样像 933/1000 那样糟糕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多