如何在PHP中生成學生證學號?怎么避免使用goto函數?

如何在PHP中生成學生證學號?怎么避免使用goto函數?

編程問答qingyu2020-12-06 14:47:49654A+A-

  如何在PHP中生成學生證學號?怎么避免使用goto函數?

  問題描述:

  我想生成一個唯一的學生證學號。我想要的格式是年份的最后兩位數字,再加上5位數字。例如:2000001、2000002、2000003 等。

  以下是我的php代碼:

$pre = substr(strval(date("Y")),2);
$num = 1;
include "dbh.inc.php"; 
$sql_cmd = "SELECT id FROM students WHERE id=?;";
$stmt = $conn->stmt_init();
if ($stmt) {
    $prepare = $stmt->prepare($sql_cmd);
    if ($prepare) {
        bind:
        $studentid = $pre . str_repeat('0', (4 - strlen($num)) ) . strval($num);
        $bind = $stmt->bind_param('s', $studentid);
        if ($bind) {
            $result = $stmt->execute();
            if ($result) {
                $num++;
                goto bind;
            }
            else {
                // insert student here using $studentid
            }
        }
    }
}

  我覺是上面代碼需要改進:

  1.使用goto,我不想用這個函數.

  2.每次代碼開始,綁定,執行等在每個循環中查詢數據庫帶來很大的性能開銷,顯然很慢。

  是否有更好的方法呢?

  回答:

  1.可以在MySQL端生成新的學生證ID。

include "dbh.inc.php"; 

$sql = 
    "SELECT CONCAT("
        . "DATE_FORMAT(CURDATE(), '%y'), "
        . "LPAD(COALESCE(MAX(RIGHT(id, 5)) + 1, 1), 5, '0')"
    . ") AS new_id "
    . "FROM students";

$result = $conn->query($sql);
if ($result) {
    if ($row = $result->fetch_assoc()) {
       // insert student here using $row['new_id']
    }
}

  2.使用觸發器,在插入數據時創建觸發器。

DELIMITER //

CREATE TRIGGER students_tr_bi BEFORE INSERT ON students
FOR EACH ROW
BEGIN

    SET NEW.id = (
        SELECT CONCAT(
            DATE_FORMAT(CURDATE(), '%y'),
            LPAD(COALESCE(MAX(RIGHT(id, 5)) + 1, 1), 5, '0')
        ) FROM students
    );
      
END//

DELIMITER ;

-- Usage:
INSERT INTO students (name) VALUES ('John');
點擊這里復制本文地址 如需修改代碼或者定制開發,請聯系站長

支持Ctrl+Enter提交
qrcode

大黃雞源碼編程網 © All Rights Reserved.  
網站備案號:閩ICP備18012015號-4
Powered by Z-BlogPHP
聯系我們| 關于我們| 廣告聯系| 網站管理

私人毛片免费高清影视院_又浪又紧又丰满人妻_亚洲成a人片在线观看网址