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";

我收到此错误:

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

cena、cena2 和 not_show 是数字

4

2 回答 2

2

如果我不得不猜测,它似乎$cena2是 null、空字符串或布尔值false。其中任何一个都将字符串化为空,从而导致 SQL like ..., 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 扩展,并且不应在现代代码中使用。

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

于 2013-06-30T22:03:36.843 回答