2013-06-30 78 views
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"; 

我得到这个错误:MySQL错误1064 - 错误在哪里?

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 obrazok='', not_show='1' WHERE id = 1 at line 1

以上的价格,cena2和not_show是数字

+0

您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的'obrazok ='',not_show ='1'WHERE id = 1'处使用正确的语法 –

+1

我认为您的报价存在问题 –

+5

更大的问题你是在手工拼凑SQL。 :P查看准备好的陈述。 – cHao

回答

2

如果我猜,这似乎$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扩展名已被弃用,不应在现代代码中使用。

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变量调试查询在查询之前确保所有值都符合预期。 (提示缩小搜索范围)