php - mysqli 中每行的唯一 ID

标签 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')");
?>

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

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

unique_id 的每个值都必须是唯一的。有什么有效的方法可以做到这一点吗?

最佳答案

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

您的查询容易受到 SQL 注入(inject)攻击,请使用 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 否
  • 准备好的语句(客户端)

    • PDO:是
    • MySQLi:否

关于php - mysqli 中每行的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802389/

相关文章:

php - Laravel - 在 Jobs 中使用图像干预。 imagettfbbox 错误

MySQL 语法 - 变量的标准偏差,而不是列

更新查询上的 MySQL 高 lock_time 导致服务器卡住

indexing - Plone - ZODB 目录查询 sort_on 多个索引?

php - 此站点似乎有未经授权的尝试访问您位于以下位置的数据库:

php - 新的 heroku php buildpack 本地 Composer 更新失败

mysql - 从文本文件中的术语列表创建 MySQL 表

mysql - 连接空间 mysql 索引

java - Java中字符串索引越界

php - PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo 失败:没有这样的主机已知