2013-06-30 115 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變量調試查詢在查詢之前確保所有值都符合預期。 (提示縮小搜索範圍)