为每个 MySQL 行调用一个函数
Calling a function for each MySQL row
我有一个标准的 MySQL 数据库,大约有 60 行(如在用户帐户中)。当我第一次这样做时,我犯了一个错误,让会话 ID 与简单帐户 ID 相同,现在我想纠正我的错误,我显然不会通过 60 行来重置它们不同的安全会话 ID,所以我写这个函数:
function generate_sessionid(){
return bin2hex(openssl_random_pseudo_bytes(32));
}
function assign_all_sessionids(){
$sessionid = generate_sessionid();
$conn = sql_connect();
$result = mysqli_query($conn, "UPDATE accounts SET sessionid='$sessionid' WHERE 1");
sql_disconnect($conn);
}
assign_all_sessionids();
问题:数据库中的每个帐户都获得与其他帐户相同的随机会话 ID。我如何让它调用每一行的函数,以使其对于每一行都是随机的?
您可以通过首先将所有会话 ID 设置为 NULL
:
来做您想做的事
UPDATE accounts
SET sessionid = NULL;
然后,在循环内:
UPDATE accounts
SET sessionid = '$sessionid'
WHERE sessionid IS NOT NULL
LIMIT 1;
通常你不想在循环中执行查询,但是在这种情况下你需要获取所有当前的唯一标识符,循环并生成一个新的标识符,然后更新一个:
function assign_all_sessionids(){
$conn = mysqli_connect('whatever...');
$select = mysqli_query($conn, "SELECT sessionid FROM accounts");
while(list($id) = mysqli_fetch_assoc($select)) {
$sessionid = generate_sessionid();
$update = mysqli_query($conn, "UPDATE accounts SET sessionid='$sessionid' WHERE sessionid='$id'");
}
}
尝试从数据库中获取用户计数并简单地执行 N 次
function assign_all_sessionids(){
$conn = sql_connect();
// getting users count
// here just change 'id' to your id parameter
$result = mysqli_query($conn, "SELECT id FROM accounts");
$arr = $result->fetch_array(MYSQLI_NUM);
// executing N times
for($i = 0; $i < $result->num_rows; $i++){
$sessionid = generate_sessionid();
// here just change 'id' to your id parameter again
mysqli_query($conn, "UPDATE accounts SET sessionid='$sessionid' WHERE `id`=".$arr[$i]);
}
sql_disconnect($conn);
}
我有一个标准的 MySQL 数据库,大约有 60 行(如在用户帐户中)。当我第一次这样做时,我犯了一个错误,让会话 ID 与简单帐户 ID 相同,现在我想纠正我的错误,我显然不会通过 60 行来重置它们不同的安全会话 ID,所以我写这个函数:
function generate_sessionid(){
return bin2hex(openssl_random_pseudo_bytes(32));
}
function assign_all_sessionids(){
$sessionid = generate_sessionid();
$conn = sql_connect();
$result = mysqli_query($conn, "UPDATE accounts SET sessionid='$sessionid' WHERE 1");
sql_disconnect($conn);
}
assign_all_sessionids();
问题:数据库中的每个帐户都获得与其他帐户相同的随机会话 ID。我如何让它调用每一行的函数,以使其对于每一行都是随机的?
您可以通过首先将所有会话 ID 设置为 NULL
:
UPDATE accounts
SET sessionid = NULL;
然后,在循环内:
UPDATE accounts
SET sessionid = '$sessionid'
WHERE sessionid IS NOT NULL
LIMIT 1;
通常你不想在循环中执行查询,但是在这种情况下你需要获取所有当前的唯一标识符,循环并生成一个新的标识符,然后更新一个:
function assign_all_sessionids(){
$conn = mysqli_connect('whatever...');
$select = mysqli_query($conn, "SELECT sessionid FROM accounts");
while(list($id) = mysqli_fetch_assoc($select)) {
$sessionid = generate_sessionid();
$update = mysqli_query($conn, "UPDATE accounts SET sessionid='$sessionid' WHERE sessionid='$id'");
}
}
尝试从数据库中获取用户计数并简单地执行 N 次
function assign_all_sessionids(){
$conn = sql_connect();
// getting users count
// here just change 'id' to your id parameter
$result = mysqli_query($conn, "SELECT id FROM accounts");
$arr = $result->fetch_array(MYSQLI_NUM);
// executing N times
for($i = 0; $i < $result->num_rows; $i++){
$sessionid = generate_sessionid();
// here just change 'id' to your id parameter again
mysqli_query($conn, "UPDATE accounts SET sessionid='$sessionid' WHERE `id`=".$arr[$i]);
}
sql_disconnect($conn);
}