2011-07-01 52 views
2

這裏的東西,其他PDO運作良好,但這不是。我曾嘗試過這個單一的PDO有什麼問題?

execute(array(':t'=>$table)); 

沒有成功。想法?

public function __construct($table){ 
     try{ 
       $pdocnx = new PDO("mysql:host=localhost;dbname=sigcat",'root',''); 
       $stmt = $pdocnx->prepare('select * from sigcat.:t'); 
       $stmt->bindParam(':t', urldecode($table), PDO::PARAM_STR,45); 
       $stmt->execute(); 
       $row = $stmt->fetchAll(PDO::FETCH_ASSOC); 
       var_dump($row); 
     }catch(Exception $e){ 
      echo $e->getMessage(); 
     } 

    } 

我在'耗材'中獲得了很多記錄,但它返回數組(0){}。我用$ _GET ['table']得到'table'參數。沒有例外。

回答

2

您不能綁定表名稱,只能綁定值。

維護有效名稱列表並確保該字符串存在於有效列表中。

如果你不能建立一個有效名稱的列表,你可能做錯了什麼。

+0

謝謝。用switch + mysql_list_tables我會完成它。 – Felix

-1

您不能綁定表,所以你可以做一個偷偷摸摸的伎倆像這樣:

public function myFunction($table){ 
    $st = "SELECT FROM `" . $table ."` ..some sql"; 
    $statement->prepare($st); 
    $statement->execute(); 

} 

希望這有助於。