2014-02-21 195 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}”); 然后其余的代码..干杯 –