【发布时间】:2013-11-19 07:37:09
【问题描述】:
我想问一下,我正在使用 PHP 开发一个网站,目前正在寻找更好的方法。
我想为交易代码生成随机字符串。
例如:客户购买了一个产品,必须有交易码生成并存入数据库表中。
使用 PHP 函数生成它然后检查数据库表中是否已经存在事务代码更好,还是应该创建一个存储过程来执行此操作?你觉得哪个更快?
【问题讨论】:
标签: php regex database codeigniter stored-procedures
我想问一下,我正在使用 PHP 开发一个网站,目前正在寻找更好的方法。
我想为交易代码生成随机字符串。
例如:客户购买了一个产品,必须有交易码生成并存入数据库表中。
使用 PHP 函数生成它然后检查数据库表中是否已经存在事务代码更好,还是应该创建一个存储过程来执行此操作?你觉得哪个更快?
【问题讨论】:
标签: php regex database codeigniter stored-procedures
【讨论】:
您可以使用 UUID(通用唯一标识符),它可以用于任何目的,从用户身份验证字符串到支付交易 ID。
“SagePay 使用类似样式的字符串作为交易 ID”
UUID 是一个 16 字节(128 位)的数字。在其规范形式中,UUID 由 32 个十六进制数字表示,显示在由连字符分隔的五组中,格式为 8-4-4-4-12,总共 36 个字符(32 个字母数字字符和四个连字符)。
function generate_uuid() {
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff ),
mt_rand( 0, 0x0C2f ) | 0x4000,
mt_rand( 0, 0x3fff ) | 0x8000,
mt_rand( 0, 0x2Aff ), mt_rand( 0, 0xffD3 ), mt_rand( 0, 0xff4B )
);
}
//调用函数
$transationID = generate_uuid();
一些示例输出如下:
51B4DE29-3B71-4FD2-9E6C-071703E1FF31
3777C8C6-9FF5-4C78-AAA2-08A47F555E81
54B91C72-2CF4-4501-A6E9-02A60DCBAE4C
60F75C7C-1AE3-417B-82C8-14D456542CD7
8DE0168D-01D3-4502-9E59-10D665CEBCB2
希望它对未来的人有所帮助:)
【讨论】:
我不认为创建随机字符串会成为速度瓶颈,php 可以做到。 uniqid 已经足够好了,因为它“基于当前时间,以微秒为单位”。但是仍然可能发生冲突(例如,您有多个服务器),尽管很少。所以只要把它设为unqiue-index,如果插入失败,重试。
【讨论】: