流水号生成规则php,php与mysql产生当天订单流水号避免重复处理

简单介绍如何使用php取得订单流水号,mysql使用DATE_FORMAT与FROM_UNIXTIME判断是否为当日订单,根据已存在的订单笔数更新流水号末码。

[cc lang=”php”]/**

* 产生当天订单流水号

*

* @return string

*/

function genSn()

{

$oper = ‘DATE_FORMAT(FROM_UNIXTIME(t.time),”%Y%m%d”) = ‘

. ‘DATE_FORMAT(FROM_UNIXTIME(‘ . $_SERVER[‘REQUEST_TIME’] . ‘),”%Y%m%d”) ‘

. ‘LIMIT 1’;

$sql = ‘SELECT o.order_sn ‘

. ‘FROM order AS o ‘

. ‘WHERE ‘ . $oper . ‘ ‘

. ‘ORDER BY o.order_sn DESC’;

$res = $db->getOne($sql);

$lastNum = (int)mb_substr($res, -4, 4);

$orderSn = ‘PO’ . date(‘Ymd’, $_SERVER[‘REQUEST_TIME’]) . str_pad(($lastNum + 1), 4, ‘0’, STR_PAD_LEFT);

return $sn;

}

[/cc]

产生订单流水号之后在insert资料库时可能会有预期外的重复流水号发生,因此可以使用sql执行错误码来决定是否重新取号或者停止取号。

产生订单编号。

执行sql insert语句。

取得sql语法执行错误码。

若错误码大于0以及错误码等于1062代表资料重复,停止行为。

[cc lang=”php”]do {

// 取得订单编号,请使用你的取得方式

$sn = genSn();

// 执行insert sql,请使用你的sql执行方式

$sql = ‘INSERT INTO (order_sn) VALUES (‘ . $sn . ‘)’;

$db->query($sql);

// 取得sql error错误码,请使用你的错误码取得方式

$errorNo = getErrorNo();

// 资料重複以外的错误则停止回圈

if ($errorNo > 0 && $errorNo != 1062) {

break;

}

} while ($errorNo == 1062); // 错误码为1062则重复继续回圈[/cc]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值