Php PDO execute()抛出错误(42000)

Php PDO execute()抛出错误(42000),php,pdo,Php,Pdo,我试图使用PDO执行一个准备好的语句,但是我一直得到一个错误,尽管类似的语句在其他文件中运行良好 下面是我收到的错误:`Array([0]=>42000[1]=>1064[2]=>您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行“merch”附近使用的正确语法)1 以下是代码的简化版本: class Ben { protected $_BTH; protected $_BTH; function __construct() {

我试图使用PDO执行一个准备好的语句,但是我一直得到一个错误,尽管类似的语句在其他文件中运行良好

下面是我收到的错误:`Array([0]=>42000[1]=>1064[2]=>您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行“merch”附近使用的正确语法)1

以下是代码的简化版本:

class Ben { 

    protected $_BTH;
    protected $_BTH;

    function __construct() {
        $this->_BBH = (---new PDO object---)
        $this->_BTH = $this->_BBH->prepare("SELECT * FROM :table");
    }
    my_function($table) {
        $this->_BTH->bindParam(':table', $table, PDO::PARAM_STR); // table == merch
        $this->_BTH->debugDumpParams(); // outputs SQL: [20] SELECT * FROM :table Params: 1 Key: Name: [6] :table paramno=-1 name=[6] ":table" is_param=1 param_type=2
        $execResult = $this->_BTH->execute();

        if ($execResult == false) {
            die(print_r($this->_BTH->errorInfo())); // prints out the error I wrote earlier
        }
    }
}

我不知道语法错误在哪里,我是否使用了关键字?谢谢您的帮助:)

您无法准备表名。你也不应该。如果您的表名来自用户输入,您可能应该重新考虑数据库结构。

您好,谢谢您的快速回答。我们好奇的是,这是因为不在prepared语句中命名表会删除可能发生的优化?此外,表名根据我搜索的内容而不是用户输入而有所不同。如果它不是来自用户输入,并且您确定它是安全的,并且不包含任何有害内容,则可以直接传递变量。