2014-02-09 48 views
0

我遇到了這篇文章,它引導我嘗試將舊代碼更新爲PDO。我的問題是,我甚至在這個代碼的球場?我可以改進它還是更好地完成它?如何正確使用CASE..WHEN使用PDO

$qur = $db->prepare("UPDATE CASE site 
    WHEN $acctype != 1 THEN name=:name, url=:url, lang=:lang, state=:state, hs=:hs, cph=:cph WHERE id=:id && usrid=:usrid 
    ELSE name=:name, url=:url, lang=:lang, state=:state, hs=:hs WHERE id=:id && usrid=:usrid 
           END"); 
       $qur->bindParam(':name', $sname); 
       $qur->bindParam(':url', $surl); 
       $qur->bindParam(':lang', $slang); 
       $qur->bindParam(':state', $is); 
       $qur->bindParam(':hs', $hs); 
       $qur->bindParam(':cph', $cph); 
       $qur->bindParam(':id', $sid); 
       $qur->bindParam(':usrid', $userid); 
       $qur->execute(); 

非常感謝您提前尋求幫助。

+0

我們不知道...它在大球場嗎?它工作嗎?你有錯誤嗎? –

回答

0

我什至不能告訴你打算做什麼CASE聲明。你犯了多個語法錯誤和邏輯錯誤。

  • UPDATE應遵循你想改變的表,而不是CASE表達。

  • 如果您使用CASE <expr>,那麼每個WHEN應該是一個值,而不是布爾表達式。

  • 在一個CASE表達式中,您將無法在UPDATE中設置多個列。

  • CASE聲明的中間沒有允許WHERE子句。

  • 我不知道爲什麼當其他變量被包含爲參數時,爲什麼會在表達式中插入$acctype。是$acctype列的名稱或東西?

我只是猜測,但是這很可能是一個更好的局面,形成UPDATE查詢動態而不是使用CASE的。