【问题标题】:PDO execute() throws error(42000)PDO 执行()抛出错误(42000)
【发布时间】:2012-07-04 21:08:55
【问题描述】:

我正在尝试使用 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
        }
    }
}

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

【问题讨论】:

标签: php pdo


【解决方案1】:

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

【讨论】:

  • 嗨,真相,感谢您的快速回答。只是我们的好奇心是因为不在准备好的语句中命名表会删除可能发生的优化?此外,表名取决于我搜索的内容而不是用户输入。
  • 如果它不是来自用户输入,并且你确定它是安全的并且不包含任何邪恶的东西,你可以直接传递变量。
猜你喜欢
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2018-05-15
  • 1970-01-01
  • 2019-08-17
  • 2023-03-23
相关资源
最近更新 更多