2013-09-01 72 views
-1

行,所以我保存,我想在側更新變量的列,所以我需要把側的可變主查詢我嘗試做像這樣PDO更新與查詢內部變量

$sqlltyryrt = "UPDATE user_items SET :fggdgdf = :fggdgdf +1 WHERE username=?"; 
    $qqqqq = $db->prepare($sqlltyryrt); 
$qqqqq->execute(array('fggdgdf'=>$fggdgdf),$_SESSION['username']); 

我已經尋找答案,在這裏發現了一個線程網站做同樣的:

+0

實際上你的問題是什麼?不是說查詢看起來是正確的(AFAIK只能在查詢中使用相同的佔位符名稱一次,而且分配給綁定的參數也沒有意義),只是詢問哪個部分完全是你所困惑的,因爲它目前缺少你的問題。 – hakre

+0

@hakre - 我期待看到我混合他們的地方。 – andrewsi

+0

嗯我感到困惑與SET我想要做SET $ fggdgdf = $ fggdgdf +1但當然這不會工作... – user2734610

回答

0
$sqlltyryrt = "UPDATE user_items SET :fggdgdf = :fggdgdf +1 WHERE username=?"; 
$qqqqq = $db->prepare($sqlltyryrt); 
$qqqqq->execute(array('fggdgdf'=>$fggdgdf),$_SESSION['username']); 

您不能綁定列的名稱;所以這是不行的。有沒有辦法使用的列或表名綁定變量,因此要做到這一點的唯一方法是變量實際上插值到字符串:

$sqlltyryrt = "UPDATE user_items SET $fggdgdf = $fggdgdf +1 WHERE username=?"; 
$qqqqq = $db->prepare($sqlltyryrt); 
$qqqqq->execute(array($_SESSION['username'])); 

但是你要非常肯定的說,你已經消毒變量,否則你可以開放SQL注入。您可以爲此使用白名單,因爲您應該能夠生成一個可能的列名稱數組,並且可以檢查變量是否存在於該數組中。

但是,您試圖綁定評論名稱的事實意味着您的數據庫設計可以通過查看來完成。

+0

謝謝你的代碼作品。在使用之前確保變量是安全的。再次感謝。 – user2734610