[英]How to create custom function for create reference number as primary in this 2021-0001 format in php
我尝试创建主键值可自定义的增量格式。 我编写 PHP function 来生成主键,使用下面的 function。
function create_referance_key($connect){
/**********************create referance key********************************/
$year = date('Y');
$query = "
SELECT MAX(strRefNo) AS refnum FROM claims
WHERE strRefNo LIKE ''".$year."'%'";
$statement = $connect->prepare($query);
if($statement->execute())
{
$result = $statement->fetchAll();
//$RefNo = '';
foreach($result as $row)
{
$RefNo = $row["refnum"];
if($RefNo == ''){
$RefNo = $year.'-'. str_pad(1, 4, '0', STR_PAD_LEFT);
}else{
$array = explode("-",$RefNo);
$RefNo = $year.'-'.str_pad($array[1] + 1, 4, 0, STR_PAD_LEFT);
}
}
return $RefNo;
}
}
我想创建一个像 2021-0001,2021-0002,2021-0003 这样的密钥。 我尝试上面的 function。第一次执行 select 查询索赔表中没有数据。如果查询返回NULL
。 其他情况查询显示最大参考数。(两者都是检查输入虚拟数据)但它不返回任何值。 我的 SQL 查询部分没问题。 我在 foreach 循环中犯了什么错误?
索赔表结构:
您的 function 没有问题。但是
SELECT MAX(strRefNo) AS refnum FROM claims
WHERE strRefNo LIKE ''".$year."'%';
以错误方式执行的参数绑定''".$year."'%'
应更改为'".$year."%'
。
改function
function create_referance_key($connect, $empno){
/**********************create referance key********************************/
$year = date('Y');;
$query = "
SELECT MAX(strRefNo) AS refnum FROM claims
WHERE strRefNo LIKE '".$year."%'";
$statement = $connect->prepare($query);
if($statement->execute())
{
$result = $statement->fetchAll();
//$RefNo = '';
foreach($result as $row)
{
$RefNo = $row["refnum"];
if(empty($RefNo)){
$RefNo = $year.'-'. str_pad(1, 4, '0', STR_PAD_LEFT);
}else{
$array = explode("-",$RefNo);
$RefNo = $year.'-'.str_pad($array[1] + 1, 4, 0, STR_PAD_LEFT);
}
}
return $RefNo;
}
}
简单~
$row = query_fetch_object(query(SELECT strRefNo FROM claims ORDER BY dtBillDate DESC LIMIT 0,1));
// SPLIT THE STRING INTO ARRAY using explode()
// print_r($getSplit) to know more what is inside the array
$getSplit = explode("/",$row->strRefNo);
$newRef = date("Y")."/".($getSplit[1] + 1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.