MYSQL查询直接工作,但不是通过PHP!

MYSQL查询直接工作,但不是通过PHP!

问题描述:

我在PHP页面上弹出以下错误。这是在查询发生之前回显$ flightquery的结果。MYSQL查询直接工作,但不是通过PHP!

INSERT INTO Flights (`adshex`,`flightno`,`route`) VALUES ('01002F','MSR845','HECA-DAAG') WHERE NOT EXISTS (SELECT flightno FROM Flights WHERE `flightno` = 'MSR845' AND `adshex` = '01002F' AND TIMESTAMPDIFF(MINUTE,`timestamp`,CURRENT_TIMESTAMP) > 360); 

Error: 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 'WHERE NOT EXISTS (SELECT flightno FROM Flights WHERE `flightno` = 'MSR845' AND `' at line 1 

如果我复制的INSERT语句为它工作,没有错误,但通过它打破了PHP与MySQL服务器!

$flightquery = "INSERT INTO Flights (`adshex`,`flightno`,`route`) VALUES ('$adshex','$flightno','$route') WHERE NOT EXISTS (SELECT flightno FROM Flights WHERE `flightno` = '$flightno' AND `adshex` = '$adshex' AND TIMESTAMPDIFF(MINUTE,`timestamp`,CURRENT_TIMESTAMP) > 360);"; 

UPDATE:

我改成了错误号,它是1064这是保留的关键字,我在哪里做呢?时间戳?

MySQL syntax for INSERT就没有WHERE子句INSERT

+0

哦,是的!那么对于MySQL 5来说,是否有条件插入的解决方案呢?即使它需要不同的结构! – 2011-03-13 08:01:36

+0

如果你只是担心主键/唯一约束违规,那么'INSERT IGNORE'就可以做到这一点。否则,你应该打开一个事务,为你的标准做一个'SELECT COUNT',并且只在没有匹配的行时插入。只要准备好应对死锁或pkey /独特的错误,另一个进程是否应该同时做同样的事情。 – Charles 2011-03-13 15:42:04

得到了坏小子360)后删除;

+0

在所有相同的错误没有差异,肯定错误在错误信息所述的语句中是早期的? – 2011-03-13 07:32:12

查询不MySQL服务器的工作,因为有PHP变量。

$ adshex,$ flightno,$路线

"INSERT INTO Flights (`adshex`,`flightno`,`route`) 
VALUES ('$adshex','$flightno','$route') 
WHERE NOT EXISTS (SELECT flightno FROM Flights 
    WHERE `flightno` = '$flightno' AND `adshex` = '$**adshex**' 
    AND TIMESTAMPDIFF(MINUTE,`timestamp`,CURRENT_TIMESTAMP) > 360); 
+0

但是,如果您查看顶部框,则没有变量,这是回显$ flightquery – 2011-03-13 07:31:31

+0

它们是双引号字符串中的变量。 PHP自动扩展它们。这是一个巨大的安全禁忌,但确实有效,有点。 – tdammers 2011-03-13 07:32:46