2013-08-27 39 views
-1

我需要知道在PDO準備語句中是否可以使用問號(?)作爲表名或不是。在PDO準備語句中使用問號而不是表名

$table = $_POST['table']; 
$id = $_POST['id']; 
$sql = "UPDATE ? SET priority = priority + 1 WHERE id = ?"; 
$q = $db->prepare($sql); 
$q->execute(array($table,$id)); 

我得到這個錯誤:

Warning: PDO::prepare() [pdo.prepare]: SQLSTATE[42000]: Syntax error or access violation: 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 '? SET priority = priority + 1 WHERE id = ?'

+0

謝謝@tadman建議的鏈接 –

+0

僅供參考,如果你需要的話 - 很可能你的數據庫結構是錯誤的 –

回答

-3

您需要的參數綁定是這樣的:

$q->bindParam(1, $table); 
$q->bindParam(2, $id); 

Source (see Example #2)

+0

關閉,但沒有。即使可以說這是一個大規模的疏忽,你也不能在PDO中綁定表名。 – tadman

0
從簡單的問題

除此之外,還有另一個 - 你的代碼聞起來很糟糕的數據庫設計。在一個正確計劃的數據庫中,您將需要永不通過POST請求接收表名稱。

最有可能你使用多個表,你只能使用一個表。