使用php循环更新mysql列


Updating a mysql column using a php loop

我需要更新一个mysql列,一个tokens列的初始值,一开始,这些值都是null,然后,它们需要更新,有一个token生成函数,怎么做,它只是不更新任何值,请参阅:

$query = "SELECT `id` FROM `acuses_recibo` WHERE `id_envio`=101 AND `token` IS NULL";
$result = mysqli_query($conn, $query);

在这里,我为特定的id_envio选择那些空令牌的id,然后选择

while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){//as long as there are token null values
  foreach($row as $id=>$row['id']){
    $indice = $row['id'];
    $v=getToken(32);
    echo $v.PHP_EOL;
    echo "id es: ".$row['id'].PHP_EOL;
    $queryDos = "UPDATE `acuses_recibo` SET `token`={$v} WHERE `id`={$indice} ";
    mysqli_query($conn, $queryDos);
}

getToken(32)计算长度为32的令牌的情况下,这样就不会更新令牌,更新它们的唯一方法是如果我将$queryDos中的token设置为固定值,我如何以更新每个令牌值的方式来补救这一问题?乙醇i.a.

这就是我解决问题的方法,我将问题分为两部分,第一部分只选择特定id_envio的所有id,如下

$query = "SELECT `id` FROM `acuses_recibo` WHERE `id_envio`=101 AND `token` IS NULL";
$result = mysqli_query($conn, $query);
// an arrays is created and used to store the id´s selected
$members = array();
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$members[] = array('id'=> $row['id']);
}
// the connection is then closed, something I found on mysql not being explicitly multiconnection
mysqli_close($conn);
// then a new connection is setup
$connDos = mysqli_connect($servername, $username, $password, $database);

现在,令牌值更新如下,请注意,$indice必须强制转换为int类型,因为提取的数组返回字符串

foreach($members as $m){
  $indice = $m["id"];
  $indice = intval($indice);
  $voken=getToken(32);
  $queryDos = " UPDATE `acuses_recibo` SET `token`='{$voken}' WHERE   `id`='{$indice}' ";
  if (mysqli_query($connDos, $queryDos)) {
    echo "Record updated successfully".PHP_EOL;
  } else {
    echo "Error updating record: " . mysqli_error($connDos).PHP_EOL;
  }
}

然后,第二个连接关闭

mysqli_close($connDos);

这就是我可以将令牌值更新为其计算值的方式。我希望它能帮助到别人。