mysql update子句被忽略了

时间:2014-04-02 19:52:17

标签: php mysql sql

我有一张日期,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);

2 个答案:

答案 0 :(得分:2)

你的where子句不应该是:

WHERE Date = '".$row['Date']."' AND ID1 = '".$row['ID1']."' ");

而不是

WHERE '".$date."' = '".$row['Date']."' AND '".$id."' = '".$row['ID1']."' ");

在后者你 - 可能是偶然的 - 也使用一些变量作为字段名称,这可能会导致一些不必要的问题。例如,在您的情况下,它可能会在您的where子句中导致身份条件,这将导致您的所有行都会更新。

答案 1 :(得分:0)

update语句中的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'

feefo作为对列的引用。