为了账号安全,请及时绑定邮箱和手机立即绑定

如果序列号不存在于数据库中,如何生成序列号

如果序列号不存在于数据库中,如何生成序列号

PHP
慕运维8079593 2023-04-02 14:51:57
有谁能告诉我最好的方法吗?我正在尝试生成一个带有唯一代码的序列号我想检查数据库中是否存在序列号如果序列号已经存在于数据库中,它会生成一个新的序列号,然后插入。如果没有序列号,则直接插入数据库      <div class="col-sm-9">              <input type="text" name="sn" value="AXJ<?php echo rand(10000, 99999) ?>" class="form-control" id="sn" placeholder="" readonly>            </div>我的问题是,检查数据库的功能如何?
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我创建了一个示例。从测试数据库和表结构开始:


-- Database: `serials`


DROP TABLE IF EXISTS `serial`;

CREATE TABLE IF NOT EXISTS `serial` (

  `id` int(10) NOT NULL AUTO_INCREMENT,

  `serial` varchar(100) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

创建一个db.php文件来连接数据库:


function connect()

{

    $dsn = 'mysql:host=localhost;port=3306;dbname=serials';


    try{

        return new PDO($dsn, 'root', '');

    }catch( \Exception $e ){

        echo $e->getMessage();

        exit;

    }

}

如果您还没有准备好插入并且只想向用户显示一个独特的序列号,我创建了form.php并执行了以下操作:


<?php

require_once('./db.php');


    function createSerial() {

        $timestamp = time() . rand(10000, 99999);


        for($i=1;$i<=strlen($timestamp);$i++){

            $piece = substr($timestamp, $i - 1, 1);

            $shuffle_array[] = $piece;

        }


        shuffle($shuffle_array);


        return implode('', $shuffle_array);

    }


    $pdo = connect();


    //try up to 5 times

    for($i=0;$i<=4;$i++) {

        $serial_number = createSerial();


        $sql = "SELECT * FROM serial WHERE serial = :serial";

        $dbh = $pdo->prepare($sql);

        $dbh->execute( [

            ':serial' => $serial_number

        ]);


        if( $dbh->rowCount() ) {

            $serial_number = '';

        }

    }



if( $serial_number) { ?>

<form action="form.php" method="post">


    <div class="col-sm-9">

        <input type="text" name="sn" value="AXJ<?php echo $serial_number; ?>" class="form-control" id="sn" placeholder="" readonly>

    </div>


<?php

}

?>

还做了一个插入的例子:


function createSerial() {

    $timestamp = time() . rand(10000, 99999);


    for($i=1;$i<=strlen($timestamp);$i++){

        $piece = substr($timestamp, $i - 1, 1);

        $shuffle_array[] = $piece;

    }


    shuffle($shuffle_array);


    return implode('', $shuffle_array);

}


//database

$pdo = connect();


//try up to 5 times

for($i=0;$i<=4;$i++) {

    $serial_number = createSerial();


    $sql = "SELECT * FROM serial WHERE serial = :serial";

    $dbh = $pdo->prepare($sql);

    $dbh->execute( [

        ':serial' => $serial_number

    ]);


    if( ! $dbh->rowCount() ) {

        //insert


        $sql = "INSERT INTO serial VALUES ( :id, :serial)";

        $dbh2 = $pdo->prepare($sql);

        $dbh2->execute([

            ':id' => null,

           ':serial' => $serial_number

        ]);

        break;

    }

}


查看完整回答
反对 回复 2023-04-02
  • 1 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信