PHP之生成左填充0的编号(存储到MYSQL)

10 篇文章 0 订阅
  • 项目需求:
    • 定长
    • 递增
    • 左填充0
  • 例子:
    • 000001,000002,000003等等

解决方案:


备注:如果有更好的解决方案,希望访问者能多多提出意见。谢谢!


第一步: 首先考虑MYSQL的存储数据类型,当时第一感觉就是用int类型,因为有个叫zerofill的小东西,于是开始建表:


CREATE TABLE `p_file` (
  `file_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `file_number` int(6) unsigned zerofill NOT NULL DEFAULT '000000',
  PRIMARY KEY (`file_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


第二步: 在PHP中进行查询数据库,用的是TP5框架:

Db::table('p_file')->field('file_number')->where('file_id=1')->find();

//得出的结果为:
//  array (size=1)
//    'file_number' => int 1


明显没有得到预期的效果,但是数据库中查看的数据是这样的:

这里写图片描述

其实在第二步已经观察到了一些问题,int类型,后来在网上搜集了一些资料,了解到MYSQL中的cast()convert()函数:

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。两者具体的语法如下:

1   CAST(value as type);
2   CONVERT(value, type);
就是CAST(xxx AS 类型), CONVERT(xxx,类型)。

可以转换的类型是有限制的。这个类型可以是以下值其中的一个:

二进制,同带binary前缀的效果 : BINARY    
字符型,可带参数 : CHAR()     
日期 : DATE     
时间: TIME     
日期时间型 : DATETIME     
浮点数 : DECIMAL      
整数 : SIGNED     
无符号整数 : UNSIGNED 


第三步:使用cast函数解决上面的问题:

Db::table(static::$tableName)->field('cast(file_number as char) as file_number')->where('file_id=1')->find();
//得出的结果为:
//  array (size=1)
//      'file_number' => string '000001' (length=6)


上面的介绍貌似和PHP没多大关联,重点是mysql的存储和获取。下面介绍一下php源码生成上述格式的代码:

public function makeFileNumber($count){
    $count++;
    //生成编号,当然还有其它方法
    return str_pad($count, 6, 0, STR_PAD_LEFT);
}
/**
 * Pad a string to a certain length with another string
 * @link http://php.net/manual/en/function.str-pad.php
 * @param string $input <p>
 * The input string.
 * </p>
 * @param int $pad_length <p>
 * If the value of pad_length is negative,
 * less than, or equal to the length of the input string, no padding
 * takes place.
 * </p>
 * @param string $pad_string [optional] <p>
 * The pad_string may be truncated if the
 * required number of padding characters can't be evenly divided by the
 * pad_string's length.
 * </p>
 * @param int $pad_type [optional] <p>
 * Optional argument pad_type can be
 * STR_PAD_RIGHT, STR_PAD_LEFT,
 * or STR_PAD_BOTH. If
 * pad_type is not specified it is assumed to be
 * STR_PAD_RIGHT.
 * </p>
 * @return string the padded string.
 * @since 4.0.1
 * @since 5.0
 */
function str_pad ($input, $pad_length, $pad_string = null, $pad_type = null) {}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值