Php 我正在尝试为所有用户生成一个唯一的哈希

Php 我正在尝试为所有用户生成一个唯一的哈希,php,mysql,database,mysqli,database-design,Php,Mysql,Database,Mysqli,Database Design,我试图为数据库中的所有用户生成一个唯一的哈希;这是我的密码: <?php include("php/connect.php"); $sql = "SELECT id FROM user"; while ($id = mysqli_fetch_assoc(mysqli_query($conn, $sql))) { $new_hash = md5(uniqid(rand(), TRUE)); $sql2 = "INSERT INTO user (hash) VALU

我试图为数据库中的所有用户生成一个唯一的哈希;这是我的密码:

<?php
include("php/connect.php");


$sql = "SELECT id FROM user";


while ($id = mysqli_fetch_assoc(mysqli_query($conn, $sql))) {

    $new_hash = md5(uniqid(rand(), TRUE));

    $sql2 = "INSERT INTO user (hash) VALUE ('$new_hash') WHERE id = $id['id']";
    mysqli_query($conn, $sql2);


}

?>
关于这个问题:

$sql2 = "INSERT INTO user (hash) VALUE ('$new_hash') WHERE id = $id['id']";
不使用子句,does,as does

然而,我不知道你为什么要这么做。使用设置为“自动增量”的列应该足以拥有唯一的id

然而,如果这是您想要做的,那么您将需要使用上面显示的方法之一

  • 顺便说一下,这会给你带来一个语法错误
即:


我认为您在这里的意思是更新
user
表的
hash
字段。如果你真的不在乎散列是什么,只要它们是准随机的,那么就这样做:

UPDATE user SET hash=SHA2(UUID())

如果您希望它们以加密方式随机、完全不可预测,则需要使用比函数更好的随机数据生成器。

警告:使用
mysqli
时,应使用and将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。永远不要将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能非常有害。MD5确实不值得使用。至少是绝对有用的。读这篇文章的方式不是codeigniter方式,你不需要
更新
而不是
插入
if(!$sql2){ 

  echo "Error: " . mysqli_error($conn);

}
UPDATE user SET hash=SHA2(UUID())