Php PDO execute()抛出错误(42000)
我试图使用PDO执行一个准备好的语句,但是我一直得到一个错误,尽管类似的语句在其他文件中运行良好 下面是我收到的错误:`Array([0]=>42000[1]=>1064[2]=>您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行“merch”附近使用的正确语法)1 以下是代码的简化版本: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() {
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语句中命名表会删除可能发生的优化?此外,表名根据我搜索的内容而不是用户输入而有所不同。如果它不是来自用户输入,并且您确定它是安全的,并且不包含任何有害内容,则可以直接传递变量。