2011-03-30 58 views
0

我有一个非常简单的MySQL查询,通常效果很好对我的其他网站,但是这一次我收到以下错误:MySQL的语法错误

Fatal 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 id = 1' at line 1 INSERT INTO members (plan, active) VALUES ('3 Days Plan','Y') where id = 1

代码:

$db->query("INSERT INTO members (plan, active) VALUES ('$plan','$active') where id = $custom"); 

我我正在使用mysql rainphp类。

我肯定有一个简单的解决方案,但我是新手,只是不能想出办法来的:)

编辑:

大家好,

谢谢您的回答!我觉得现在不知道WHERE子句只用于UPDATE,所以现在感觉像个白痴。但它是有意义的!

再次感谢您的帮助!

+3

“insert”语句中不能有'where'子句 - 你想要做什么? – Blorgbeard 2011-03-30 10:59:11

回答

4

不能插入和使用WHERE在同一时间。这只适用于更新。

3

如果你想INSERT,使用方法:

$db->query("INSERT INTO members (plan, active) 
    VALUES ('".mysql_real_escape_string($plan)."', 
    '".mysql_real_escape_string($active)."')"); 

WHERE条款是没用在这里。

编辑:你想做一个INSERTUPDATE

如果UPDATE

$db->query("UPDATE members SET 
    plan = '".mysql_real_escape_string($plan)."', 
    active = '".mysql_real_escape_string($active)."' 
    WHERE id=".intval($id)); 
0

您不需要在插入语句中提供where子句。

1

您不应在插入查询中使用where子句。


删除where条款,让您的代码如下所示:

$db->query("INSERT INTO members (plan, active) VALUES ('$plan','$active')"); 


不知道为什么你把这个where条款存在;但如果您想要修改某些数据,则需要使用update查询 - 而不是insert

例如:

update members 
set plan = '$plan', 
    active = '$active' 
where id = $custom 


一点题外话:你需要确保你逃避你的数据 - 如果使用您使用了您类(PDO::quote提供的功能/方法,例如, PDO)

+0

嗨Pascal,我正在使用一个小函数(函数安全($ value){htmlentities($ value,ENT_QUOTES,'utf-8'); return $ value;})以确保在传递给mysql之前检查所有条目。这应该这样做吧? – Andrej 2011-03-30 11:12:15

+1

否:htmlentities为HTML输出转义数据;不适用于SQL输出;;我应该补充说htmlentities返回修改过的字符串,并且在这里,你没有使用它的返回值 - 所以,基本上,你的函数什么都不做。 – 2011-03-30 11:12:49

+0

哦,好吧。谢谢(你的)信息。我会改变它,并确保使用mysql_real_escape_string转义所有数据。我希望这会做到。 – Andrej 2011-03-30 11:15:57