MySQL错误1064 - 错误在哪里?

时间:2013-06-30 21:56:30

标签: mysql

$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是数字

2 个答案:

答案 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变量来调试您的查询,以确保所有值都符合预期。 (缩小搜索范围的提示)