我的MySQL数据库中有大约1000条记录。我最近添加了一个名为 UniqueKey 的新列,我希望使用随机的唯一键更新表中的所有行。
这就是我得到的:
$updatequery = "SELECT * FROM pictures";
$resultt = $conn->query($updatequery);
while ($roww = $resultt->fetch_array()) {
$rowws[] = $roww;
}
foreach($rowws as &$roww) {
$UniqueKey = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 6);
$sqlupdate = "UPDATE pictures SET UniqueKey = '$UniqueKey'";
mysqli_query($conn, $sqlupdate);
}
这里的问题如下。它会创建一个 UniqueKey ,但它会将这个新的随机值上传到我的所有行。我怎么能这样做?:
提前致谢!一直试图解决这个问题几个小时..
答案 0 :(得分:4)
如果没有where
子句,更新将更新所有记录。因此,请从以下位置更新您的查询:
UPDATE pictures SET UniqueKey = '$UniqueKey'
为:
UPDATE pictures
SET UniqueKey = '$UniqueKey'
where id = ?
或类似的东西,它标识每次要更新的一条记录。
此外,您不需要foreach
,请在while
循环中完成所有操作。
答案 1 :(得分:4)
无需使用额外的foreach
循环。您可以在while
循环中完成所有工作,如下所示:
while ($roww = $resultt->fetch_array()) {
$UniqueKey = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 6);
$sqlupdate = "UPDATE pictures SET UniqueKey = '$UniqueKey' WHERE id = '".$roww['id']."'";
mysqli_query($conn, $sqlupdate);
}
注意:给定示例假定id
是表格中的主键。您可以相应地更改
答案 2 :(得分:3)
其他人已经解决了一次更新所有行的问题。 但是如果你真的想拥有唯一值,我建议在你的UniqueKey列中添加一个UNIQUE约束。
此外,你可以将你的一代唯一密钥和更新查询放在一个do-while循环中,如下所示:
collection.remove({_id: studentId.toString()}, function(err) {...
这两个步骤的组合将确保密钥是唯一的并且已正确插入数据库中。
答案 3 :(得分:2)
您需要设置Where子句以更新所需的行。 Foreach只会遍历您从select中获得的结果集,而您实际上并不在数据库中。当你这样做
$updatequery = "SELECT * FROM pictures";
$resultt = $conn->query($updatequery);
您正在为$ resultt分配该查询的结果,您实际上并未在内部'数据库。然后,当您查询:
$sqlupdate = "UPDATE pictures SET UniqueKey = '$UniqueKey'";
mysqli_query($conn, $sqlupdate);
您正在将所有UniqueKeys更新为同一个。你的foreach循环什么都不做,它只循环你的结果集并更新关键$ rowss次。基本上,您正在更新所有键#rowss次。我假设你的桌子上有自动增量ID?
如果是这样,您可以删除foreach循环并将其替换为:
$idresult = $conn->query("SELECT id FROM pictures");
while ($row = $idresult->fetch_assoc()){
mysqli_query($conn, "UPDATE pictures SET UniqueKey = '$UniqueKey' WHERE id = " . $row['id'];
}
答案 4 :(得分:1)
您正在更新每一行,因为您没有使用WHERE子句。
做这样的事情:
foreach($rowws as &$roww) {
$UniqueKey = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 6);
$sqlupdate = "UPDATE pictures SET UniqueKey = '$UniqueKey' WHERE primary_key=".$rowws['primary_key'];
mysqli_query($conn, $sqlupdate);
}
primary_key
是表格的PK列。