这是我使用过的代码
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/