为什么这个MySQL语句不起作用?

时间:2015-03-12 21:18:41

标签: mysql sql perl phpmyadmin

我有一个表Seats,其中包含SeatIDDateRouteIDSeats列。主键是SeatsID。座位的值是50,我希望从50中减去用户输入$tickettotal的任何内容,然后插入新值。

用户还必须输入他们希望旅行的RouteIDDate。我希望将这些内容与Seats的新值一起插入Seats表。

如果其他用户输入相同的DateRouteID,则应更新Seats。否则,应使用SeatIDDateRouteID以及Seats的缩减值插入新记录。

我认为这句话应该这样做,但我不断收到错误,例如

Can't find string terminator '"' anywhere before EOF, although when i put " at the end of the statement i just get another syntax error line 108, near ""') ON DUPLICATE KEY UPDATE Seats=Seats-'"$tickettotal" .

更新

我现在已将其插入正常,但在DateRouteID的重复条目上,它不会更新Seats:它仍然只是插入一个新值。 Seats - $tickettotal也不起作用。

$dbh->do("INSERT INTO $Stable(Date,RouteID) 
VALUES ('$Tdate','$Rid') ON DUPLICATE KEY UPDATE Seats=Seats-'$tickettotal'");

更新答案

因为我没有一个独特的列,所以我创建了一个同时添加了date和RouteID的文章。

$Tdate =~ s/-//gi;
$dateandrid = $Tdate . $Rid;

第一行删除连字符,第二行将它们放在一起。然后使用这些语句获得我想要的效果。

$dbh->do("INSERT INTO $Stable(RouteAndDate,Date,RouteID) VALUES    ('$dateandrid','$Tdate','$Rid') ON DUPLICATE KEY UPDATE Seats=Seats");
$dbh->do("INSERT INTO $Stable(RouteAndDate,Date,RouteID) VALUES ('$dateandrid','$Tdate','$Rid') ON DUPLICATE KEY UPDATE Seats=Seats-'$tickettotal'");

1 个答案:

答案 0 :(得分:1)

您必须避免使用参数绑定的SQL注入:

$dbh->do( qq{
     INSERT INTO $Stable(Date, RouteID) 
     VALUES (?, ?)
     ON DUPLICATE KEY UPDATE Seats=Seats-?
     },
     undef,
     $Tdate, $Rid, $tickettotal
);