当我尝试对我的php脚本执行查询时,我遇到了问题。
我需要在< 300
列的值时用'QI'
更新表的所有列,在> 300
时用'Validated'
更新表的所有列。
实际上,查询正在运行,但似乎它进行了多次更新。
可以告诉我我在 php 脚本中做错了什么吗?
这是我的脚本:
<?php
//Get column names and do the update
$fields = mysqli_query($conn,'SHOW columns FROM '.$tablename.'AmpliconData');
//columns to exclude
$columns_to_exclude= array('Amplicon');
while ($row = mysqli_fetch_array($fields)) {
$columns[]=$row['Field'];
foreach ($columns as $ind=>$val) {
if (!in_array($val,$columns_to_exclude)) {
$sqlQI = 'UPDATE '.$tablename.'AmpliconData SET '.$row['Field'].'="QI" WHERE '.$row['Field'].'<300;';
echo $sqlQI.'<br/>';
mysqli_query($conn,$sqlQI);
$sqlVal='UPDATE '.$tablename.'AmpliconData SET '.$row['Field'].'="Validated" WHERE '.$row['Field'].'>300;';
echo $sqlVal.'<br/>';
mysqli_query($conn,$sqlVal);
}
}
}
?>
我设法解决了我的问题。将查询放在循环之外是解决方案。
我是这样做的:
$fields = mysqli_query($conn,'SHOW columns FROM '.$tablename.'AmpliconData');
//columns to exclude
$columns_to_exclude= array('Amplicon');
while($row = mysqli_fetch_array($fields))
{
$columns[]=$row['Field'];}
foreach($columns as $ind=>$val){
if(!in_array($val,$columns_to_exclude))
{
//$sqlAlterInt2Varchar='ALTER TABLE '.$tablename.'AmpliconData CHANGE '.$row['Field'].' '.$row['Field'].' VARCHAR(50) NULL DEFAULT NULL';
//mysqli_query($conn,$sqlAlterInt2Varchar);
$sqlQI='UPDATE '.$tablename.'AmpliconData SET '.$val.'="QI" WHERE '.$val.'<300;';
//echo $sqlQI.'<br/>';
mysqli_query($conn,$sqlQI);
$sqlVal='UPDATE '.$tablename.'AmpliconData SET '.$val.'="Validated" WHERE '.$val.'>300;';
echo $sqlVal.'<br/>';
mysqli_query($conn,$sqlVal);
}}