如果我猜,這似乎$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擴展名已被棄用,不應在現代代碼中使用。
您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'obrazok ='',not_show ='1'WHERE id = 1'處使用正確的語法 –
我認爲您的報價存在問題 –
更大的問題你是在手工拼湊SQL。 :P查看準備好的陳述。 – cHao