如果我不得不猜测,它似乎$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 扩展,并且不应在现代代码中使用。