2014-02-21 191 views
-1

基本上我在我的數據庫中設置了足球聯賽桌,每個聯賽桌都有它自己的數據庫表,所以在一頁上我有一個下拉列表。我想要的是一旦一個聯賽被選中它帶來了適當的聯賽表...... 所以我得到這個錯誤.. 致命錯誤:調用一個非對象成員函數bind_param()從這代碼..從?中選擇數據庫?

$sql = "SELECT * FROM ?"; 
$result = $db->prepare($sql); 
     $result->bind_param('s',$league_var); 
     $result->execute(); 
     $result->bind_result(..And the rest of the code.. 

現在我明白的是,準備調用失敗,所以它返回假 - 假的不是對象,所以你不能調用該bind_param()...它是什麼ID需要做的是能夠從一個變量中選擇數據庫?

+1

您不能使用'bindParam()'作爲表名,您將不得不以不同的方式構建查詢,可能使用switch語句來獲取正確的表名... –

+0

白名單+ sprintf。 – Dan

+1

爲了詳細說明上述情況,您可以綁定的唯一東西是您要插入查詢中的數據,而不是結構化的東西。例如,如果你想要「where column = other_column」,並且「where column =?」然後參數化「other_column」,它會嘗試比較列與字符串「other_column」,而不是實際的列「other_column」。 – Andrew

回答

1

你不想讓用戶知道表名。你可以給他們一個表格的選擇(使用不同的名字),然後用列表將它們翻譯成真實姓名,然後將批准的名字附加到字符串中。

if($userTableChosen=='users table') 
{ 
    $tableToUse = "tblSuffix_Users"; 
} 
else if ..... 

$sql = "SELECT * FROM {$tableToUse}"; 

顯然這可以清理很多,使用數組或其他東西。

+0

我翻遍了另一個代碼,我用它來調出一般查看錶,但我修改了它,所以基本上SQL基本上是 $ result = $ db-> query(「SELECT * FROM {$ league_var}」); 然後其餘的代碼..乾杯 –