我想清除特定的行值在数据库中,使用这个for循环


I want to clear specific row values in a database, using this for loop

我想清除特定的行值回到null,我有一个循环的原型,我想使用。但是,我担心它会删除表中的所有内容。数据库有以下列:user、password、correct、wrong和game1、game2、game3.....game16。我想清除以game开头的列,但不清除其他列。这似乎很简单,但我似乎不能使它工作。有人能帮我理解吗?

$vals=array();
$sql="DELETE "; 
for ($i=1; $i<=16; ++$i) {
  if (isset(game$i)) { continue; }
  if ($i != 1) {
   $sql .= ",";
  }
  $sql .= "game$i=:game$i";
  $vals[":game$i"]="game$i";
  "game$i FROM user WHERE user = * ";
}
$statement=$db->prepare($sql);
$statement->execute($vals);

将值设置为NULLUPDATE,与从数据库中删除记录(DELETE)不同

为了避免必须动态创建SQL语句,看起来你可以(而且可能应该)直接写出整个SQL脚本。

UPDATE u
SET u.game1 = NULL
   , u.game2 = NULL
   , u.game3 = NULL
   , u.game4 = NULL
   , u.game5 = NULL
   , u.game6 = NULL
   , u.game7 = NULL
   , u.game8 = NULL
   , u.game9 = NULL
   , u.game10 = NULL
   , u.game11 = NULL
   , u.game12 = NULL
   , u.game13 = NULL
   , u.game14 = NULL
   , u.game15 = NULL
   , u.game16 = NULL
FROM user AS u

FROM user AS u为user创建别名,因此我可以用单个字符u引用表。当我指定UPDATE u(使用别名)时,就会看到这种情况。W3Schools在解释SQL别名方面可能比我做得更好。

如果您希望UPDATE影响所有用户,则不需要(也不应该有)WHERE子句,这意味着没有WHERE

仅供参考,delete =删除记录

如果您希望将列值设置为NULL,您可以这样做:-

 UPDATE {$table}
 SET game{$i} = NULL, ...; // you don't even need a user = *