2012-06-08 168 views
0

我試圖用PDO更新MySQL中字段的值,我嘗試過使用不同類型的預處理語句,但都沒有工作。 這裏是我的代碼:PDO不會更新到MySQL

$table = $_POST['table']; 
    $field = $_POST['field']; 
    $value = $_POST['value']; 

    try{ 

     $available = "Available"; 
     $cero = 0; 

     $q = "UPDATE ? SET $available = $cero WHERE ? = ? "; 
     $stmt = $connection->getPdo()->prepare($q); 
     $stmt->execute(array ($table,$field,$value)); 

     echo true;  

    }catch(PDOException $exception){ 
     echo $exception; 
    } 

問題就迎刃而解了:

$q = "UPDATE $table SET $available = $cero WHERE $field = ? "; 
    $stmt = $connection->getPdo()->prepare($q); 
    $stmt->execute(array ($value)); 
+1

「*沒有人工作*」不是一個有效的錯誤消息。你需要更具體。 –

+0

你可以使用綁定參數作爲表名嗎? – andrewsi

+0

@andrewsi號請參閱我的回答。 – DaveRandom

回答

2

不能使用?一個準備好的查詢來代替表名,或任何對象名稱(列,數據庫等) 。參數化僅適用於值。你將不得不做的事:

$q = "UPDATE $table SET $available = $cero WHERE $field = ? "; 
$stmt = $connection->getPdo()->prepare($q); 
$stmt->execute(array ($value)); 

張女士說,你試圖做到這表明你得到來自用戶的輸入,這是一個非常壞主意,即使你逃避它的表名。

+0

這不一定是不安全的。腳本可能會使用一些內部決策過程來決定要更新哪個表,而OP只是想爲每個表編寫一個可概化的查詢,而不是單獨的查詢。我同意採取未經驗證的用戶輸入的表名是一個壞主意...... – octern

+0

非常感謝你,我也不得不取代'?' 'WHERE'條款之後。 –

+0

感謝DaveRandom的反饋意見,最終查詢結果如下: $ q =「UPDATE $ table SET $ available = $ cero WHERE $ field =?」; $ stmt = $ connection-> getPdo() - > prepare($ q); $ stmt-> execute(array($ value)); –