'where clause' 中的未知列 'E5V7D24M10Y2015'

Unknown column 'E5V7D24M10Y2015' in 'where clause'

我有下面的代码来更新(更多'add to')数据库中的一行。我已经阅读了一些非常相似的帖子,但仍然看不出我哪里错了...

我收到错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''EventID' = '2' WHERE GameID = 'E2V1D24M10Y2015' AND PlayerID = '55'' at line 1

在这种情况下,'E5V7D24M10Y2015' 是 $GameID 的值。我正在寻找名为 GameID 的列,其中值为 E5V7D24M10Y2015,而不是该名称的列。请告诉我为什么我的 $sql 正在寻找一个以它正在寻找的值命名的列。

每次函数运行时 count($Runners) 都会不同,每个变量中的值也会不同。这就是为什么我在循环中使用 SQL。

        if ($formtype == "gameresults"){

    $Runners = $_POST['runners'];
    $event = $_POST['event'];
    $eid = $_POST['eid'];
    $vid = $_POST['vid'];
    $GameID = $_POST['GameID'];
    $date = $_POST['date'];
    $season = $_POST['season'];
    $region = $_POST['region'];
    $notes = $_POST['notes'];
    $kev = "kev@email.com";
    $email = $_POST['manager'];
    $notes = wordwrap($notes,70);
    $subject = ("Results for " . $event);
    $tix = "";
    $cashs = "";

    for ($x = 1; $x < ($Runners + 1); $x++){
    $ID = $_POST['ID' . $x];
    $Name   = $_POST['Name' .$x];
    $Place  = $_POST['Place'.$x];
    $Points = $_POST['Points'.$x];
    $Cash   = $_POST['Cash'.$x];
    $Ticket = $_POST['Ticket'.$x];
    $vn     = $_POST['vn'];
    $buyin  = $_POST['buyin'];

    $data = array($eid,$vid,$region,$buyin,$GameID,$date,$season,$ID,$Name,$Place,$Points,$Ticket,$Cash,$Runners);
    $fields = array('EventID','VenueID','Region','Buyin','GameID','Date','Season','PlayerID','Name','Position','Points','Ticket?','Cash','Runners');

for ($x = 0; $x < (count($data) - 1); $x++){
$sql = "UPDATE results SET '$fields[$x]' = '$data[$x]' WHERE GameID = '$GameID' AND PlayerID = '$ID'";
$res = mysqli_query($dbcon, $sql) or die("Update failed. <br>" . mysqli_error($dbcon));
}
$data = array($eid,$vid,$region,$buyin,$GameID,$date,$season,$ID,$Name,$Place,$Points,$Ticket,$Cash,$Runners);
    $fields = array('EventID','VenueID','Region','Buyin','GameID','Date','Season','PlayerID','Name','Position','Points','Ticket?','Cash','Runners');

for ($x = 0; $x < (count($data) - 1); $x++){
$sql = "UPDATE results SET " . $fields[$x] . " = '$data[$x]' WHERE results.GameID = $GameID AND results.PlayerID = $ID";
$res = mysqli_query($dbcon, $sql) or die("Update failed. <br>" . mysqli_error($dbcon));
}

通过指定别名试试这个。

您可以修改代码使其更清晰。我做了示例,但我没有映射所有字段,因此您需要对其进行调整。

$eid = 4;
$vid = 5;
$region = 'aa';
$buyin = 'asd';
$gameID = 5;
$date = 5;
$playerID = 10;

$fields = array(
                'EventID' => $eid,
                'VenueID' => $vid,
                'Region'  => $region,
                'Buyin'   => $buyin,
                'GameID'  => $gameID,
                'PlayerID'=> $playerID,
                'Date'    => $date,
               );

$numItems = count($fields);

$query = "UPDATE `results` SET  ";
$i = 0;
foreach($fields as $name => $value) {
    ++$i;
    if($name == 'GameID' || $name == 'PlayerID') {
       continue;
    }
    $query .= sprintf(" `%s` = '%s'%s ", $name, $value, ($i === $numItems ? "": ","));
}

$query .= sprintf(" WHERE `GameID` = '%d' AND `PlayerID` = '%d'",     $fields['GameID'], $fields['PlayerID']);

echo $query;

可以通过 $key => $value 映射字段,然后在 foreach 循环中使用。还使用 sprintf() 使阅读更清晰。但是,最好的选择是使用准备好的语句。

此外,您无需进行多个 UPDATE 查询,只需在一个查询中设置更多参数即可。