$query = "UPDATE rastliny2
SET nazov1='$nazov1', nazov2='$nazov2', poznamka='$poznamka',
kontajner='$kontajner', velkost='$velkost', cena=$cena, cena2=$cena2,
obrazok='$obrazok', not_show=$not_show
WHERE id = $id";
我收到了这个错误:
您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在第1行
obrazok='', not_show='1' WHERE id = 1
附近使用正确的语法
cena,cena2和not_show是数字
答案 0 :(得分:2)
如果我不得不猜测,似乎$cena2
是null,空字符串或布尔值false
。其中任何一个都将字符串化为空,导致SQL ..., cena2=, obrazok=...
,这是无效的SQL。
您需要在将值填充到查询中之前过滤您的值。和/或用引号包装所有内容 - MySQL就可以了。如果您尝试插入0
,可能会导致插入奇数值,例如'true'
。这就是过滤和/或验证的用武之地。
但你不必这样做。每个现代数据库API都提供了准备语句的能力。这使您可以分离SQL和数据,并使其几乎不必关心由于无效数据导致的SQL中断。 (如果你的数据不是MySQL认为有效的,它可能存储错误的东西......所以你仍然应该验证。但你不会得到MySQL错误。)
在PDO中准备和执行UPDATE语句的代码看起来有点像:
$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扩展,不应在现代代码中使用。
答案 1 :(得分:0)
试试这个
$query = 'UPDATE rastliny2 SET nazov1="'.$nazov1.'", nazov2="'.$nazov2.'",
poznamka="'.$poznamka.'", kontajner="'.$kontajner.'", velkost="'.$velkost.'",
cena="'.$cena.'", cena2="'.$cena2.'", obrazok="'.$obrazok.'", not_show="'.$not_show.'"
WHERE id="'.$id.'" ');
编辑:你可以采取其他方式,但这是我的首选方式(转义字符串来处理变量)
另一个编辑:通过在查询之前回显您的php变量来调试您的查询,以确保所有值都符合预期。 (缩小搜索范围的提示)