PHP 中的 uniqid() 将最后一个字符串更改为其他内容

uniqid() in PHP altered the last string to something else

我遇到了 uniqid 的问题。我正在尝试将 uniqid 保存在数据库中并用它创建一个 QR 码。正如我注意到的,最后一个字符串不一样。

示例: 这是已插入数据库的代码622b47895d332,而存储的二维码文件名为622b47895d333.png

怎么可能数据库中的数据与二维码的文件名不匹配?

这是我目前用来生成二维码的代码..

$text = uniqid();
$path = 'temp/';
$file = $path.uniqid().".png";
$ecc = 'L';
$pixel_Size = 10;
$frame_Size = 5;

QRcode::png($text, $file, $ecc, $pixel_Size, $frame_Size);

这是关于如何将其插入数据库的完整 PHP 代码

include 'db_connect.php';

    $conn = OpenCon();

      if (isset($_POST['submit'])) {

        $text = uniqid();
        $path = 'temp/';
        $file = $path.uniqid().".png";
        $ecc = 'L';
        $pixel_Size = 10;
        $frame_Size = 5;

        // Generates QR Code and Stores it in directory given
        QRcode::png($text, $file, $ecc, $pixel_Size, $frame_Size);

        $fname = $_POST['fname'];
        $mname = $_POST['mname'];
        $lname = $_POST['lname'];
        $suffix = $_POST['suffix'];
        $dept = $_POST['dept'];
        $user_type = $_POST['user_type'];
        $stat = 1;

        $sql = "INSERT INTO users (qr, fname, mname, lname, suffix, dept, user_type, stat) VALUES ('$text','$fname','$mname','$lname','$suffix','$dept','$user_type','$stat')";

        $result = $conn->query($sql);

        if ($result == TRUE) {

          echo '
          <div class="alert alert-success alert-dismissible show fade">
          User has been added!
          <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
          </div>
          ';

        } else {

          echo "Error:". $sql . "<br>". $conn->error;

        }

      $conn->close();

      }

您只需要生成一次uniqid(),然后重复使用它:

$uniqueid = uniqid();
$text = $uniqueid;
$path = 'temp/';
$file = $path.$uniqueid.".png";
$ecc = 'L';

或更短的替代方案:

$text = uniqid();
$path = 'temp/';
$file = $path.$text.".png";
$ecc = 'L';

您错误地期望从函数中获得相同的 UniqueID,该函数每次被调用时 generates/returns“唯一”ID