如果我猜,这似乎$cena2
为null,空字符串,或布尔值为false
。其中任何一个都会被视为无效,导致SQL像..., cena2=, obrazok=...
,这是无效的SQL。
您需要在将值填入查询之前过滤值。并且/或者将所有内容都包含在引号中 - MySQL对此很好。这可能会导致插入奇数值,如0
如果您尝试插入'true'
。这就是过滤和/或验证会进来的地方。
但是您不必这样做。每个现代数据库API都可以提供准备语句的能力。这可以让你分离SQL和数据,并且使它几乎不必关心由于无效数据导致的SQL中断。 (如果你的数据不是MySQL认为有效的,它可能存储错误的东西......所以你应该仍然验证,但你不会得到MySQL错误。)
准备和执行UPDATE语句的代码在PDO看起来有点像:
$stmt = $db->prepare('
UPDATE rastliny2
SET nazov1=:nazov1, nazov2=:nazov2, poznamka=:poznamka,
...other params...
WHERE id = :id
');
// and to run the query...
$ok = $stmt->execute(array(
':nazov1' => $nazov1,
':nazov2' => $nazov2,
':poznamka' => $poznamka,
... other params, in no particular order ...
':id' => $id,
));
// You can tell PDO to throw exceptions instead of returning false.
// If you do, then you don't need this.
if (!$ok) {
// oh noes
}
为mysqli的代码是有点难看,而且少了几分自我描述性的,但它可以在那里进行为好。
如果您使用mysql_query
,则无法准备声明。你必须继续为它做机器的工作。但是,如果你仍在使用它,那么无论如何你都应该受到惩罚。 mysql扩展名已被弃用,不应在现代代码中使用。
您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的'obrazok ='',not_show ='1'WHERE id = 1'处使用正确的语法 –
我认为您的报价存在问题 –
更大的问题你是在手工拼凑SQL。 :P查看准备好的陈述。 – cHao