【问题标题】:mysql update clause is being ignoredmysql更新子句被忽略
【发布时间】:2014-04-02 19:52:16
【问题描述】:

我有一个带有日期、ID1、ID2 score1 和 score2 的表格。当用户以 html 表单输入特定日期和 id 时,我试图通过 php 更新一行。我已经验证了所有用户条目。当我运行查询时,它会更新表中的所有行,而不仅仅是一个。这是我的代码的 sn-p:

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);

【问题讨论】:

  • 问题在于'".$date."''".$id."'。您需要拥有实际的列名,然后为其分配值。 $date$id 的值是多少?

标签: php mysql sql


【解决方案1】:

你的 where 子句不应该是:

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

而不是

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

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

【讨论】:

    【解决方案2】:

    更新语句中的 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 作为对列的引用。

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      相关资源
      最近更新 更多