我有一个表格,上面有日期,ID1,ID2得分1和得分2。当用户在 html 表单中输入特定日期和 id 时,我正在尝试通过 php 更新一行。我已经验证了所有用户条目。当我运行查询时,它会更新表中的所有行,而不仅仅是一行。这是我的代码片段:
include('connect.php');
$q = mysqli_query($dbc, "SELECT * from Game");
while ($row =mysqli_fetch_array($q, MYSQLI_ASSOC))
{
mysqli_query($dbc, "UPDATE Game SET score1 ='".$points1."', score2='".$points2."'
WHERE '".$date."' = '".$row['Date']."' AND '".$id."' = '".$row['ID1']."' ");
}
mysqli_close($dbc);
你的 where 子句不应该是:
WHERE Date = '".$row['Date']."' AND ID1 = '".$row['ID1']."' ");
而不是
WHERE '".$date."' = '".$row['Date']."' AND '".$id."' = '".$row['ID1']."' ");
在后者中,您可能偶然使用一些变量作为字段名称,这可能会导致一些不必要的问题。例如,在您的情况下,可能会导致 where 子句中出现标识条件,这将导致所有行都将得到更新。
更新语句中的 WHERE 子句仅引用文本。没有列引用。
为了调试,我建议你将SQL连接成一个字符串,并将其回显出来。
$sql = "UPDATE Game SET score1 ='".$points1."', score2='".$points2."'
WHERE '".$date."' = '".$row['Date']."' AND '".$id."' = '".$row['ID1']."' ";
echo $sql;
mysqli_query($dbc, $sql);
这些变量的值设置如下:
$date = 'fee'
$row['Date'] = 'fi'
$id = 'fo'
$row['ID1'] = 'fum'
生成的 UPDATE 更新语句中的 WHERE
子句如下所示:
WHERE 'fee' = 'fi' AND 'fo' = 'fum'
MySQL将括在单引号中的值视为字符串文字。就SQL而言,这没有错(它是有效的语法),但更有可能的是,您希望WHERE
子句更像这样:
WHERE fee = 'fi' AND fo = 'fum'
将 fee
和 fo
作为对列的引用。