我需要更新一个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);
这就是我可以将令牌值更新为其计算值的方式。我希望它能帮助到别人。