mysqli中每行的唯一ID

时间:2015-09-26 21:52:31

标签: php mysql indexing mysqli

这是我用过的代码

html

<form action = 'insert.php' method='POST'>
<input type = "text" name = "name">
<input type = "submit" name = "submit">
</form>

PHP

<?php
$servername='localhost';
$username='noob';
$password='password';
    $conn = mysqli_connect($servername, $username, $password);
    if (!$conn) 
        die("Connection failed: " . mysqli_connect_error());
$a=$_POST['name'];
mysqli_query("INSERT INTO table1 (name) VALUES ('$a')");
?>

现在,上面的代码在名为table 1的表中插入一个名称。我现在的问题是,我在表中输入了许多名称,但我希望每个名称都有一个唯一的6个字符/数字ID。我该如何更改此代码?例如,在3次插入后,表格应如下所示:

[table 1]
name               unique_id
NAME1              994323
NAME2              832344
NAME3              332123

unique_id的每个值都必须是唯一的。有没有有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

对于随机代码生成,您可以使用RAND()作为 为了获得a <= N <1的范围内的随机整数N. b,只需使用表达式FLOOR(a + RAND()*(b - a)),如mysql docs中所述

您的查询容易受到SQL注入攻击,请使用mysqli_real_escape_string进行修复!

$name = mysqli_real_escape_string($_POST['name']);
$result = mysqli_query("SELECT FLOOR(100000 + RAND() * 990000) AS random_num
    FROM table1 
    WHERE random_num NOT IN (SELECT table1.code FROM table1)
    LIMIT 1");
$row = mysqli_fetch_row($result);
$code = $row[0];

mysqli_query("INSERT INTO table1 (name, code) VALUES ('$name', '$code')");

这是随机数字生成的工作查询:http://sqlfiddle.com/#!9/2acd3/1

编辑:

我个人更喜欢PDO而不是mysqli函数,无论如何,

有人问我为什么我建议使用PDO而不是MySQLi功能。这就是我建议的方式,你可以使用你想要的任何东西

  • 数据库支持

    • PDO有12种不同的驱动程序
    • MySQLi只有Mysql驱动程序
  • API

    • PDO:只有OOP(避免不良做法)
    • MySQLi OOP或程序
  • 命名参数

    • PDO:是的
    • MySQLi no
  • 准备好的陈述(客户端)

    • PDO:是的
    • MySQLi:没有

答案 1 :(得分:0)

嗯,你可以使用唯一的时间戳,但它不是6位数而不是它。为此,你需要使用varchar作为列数据类型并使用php函数time()。这将生成唯一的数字。为此,将列长度增加到15。