2013-07-25 90 views
0

我可以使用
返回一個函數截斷表空

$stmt = $mysqli->prepare("truncate table packed_items"); 

和$語句設置爲mysqli_stmt對象,但
如果我嘗試

$stmt = $mysqli->prepare("truncate table ?"); 

然後$ stmt是設置爲null,statment:

$stmt->bind_param("s", $mytable) 

將與錯誤崩潰
調用一個非對象的成員函數bind_param()

我正在使用參數化的準備語句選擇,插入和更新沒有問題。

+1

爲什麼upvote這個1000s的副本? –

回答

1

你不能綁定任何SQL文字,但數據一個。沒有關鍵字,沒有操作員,沒有標識符。

如果你真的需要動態截斷你的表,不知道名字是否已經存在(因爲隨機截斷表顯然是非常糟糕的設計的標誌),請檢查表名,對照白名單,正確格式化,然後插入一個查詢字符串。

+0

你是說可更換參數(?)只能用信息代替,而不是符號名稱?準備方法是否讓我感到厭煩,因爲它知道唯一可以代替(?)的是符號? 「糟糕的設計」只是一種開發便利,而不是生產代碼,但無論如何都要感謝意見。此外,如果你有一個我打破的規則的鏈接,那會很好。通過「插入」你是指字符串連接? – godzilla

+0

是的,不能在準備好的語句中使用表名。 找到這個: http://forums.mysql.com/read.php?10,269185,269185 – godzilla