【问题标题】:PHP PDO SQLite prepared statement issuesPHP PDO SQLite 准备好的语句问题
【发布时间】:2011-06-02 20:33:47
【问题描述】:

我正在尝试将 PHP 应用程序从 MySQL 迁移到 SQLite,而一些以前可以工作的东西现在只是停止工作了。我通过自定义数据库包装类使用 PDO(该类是单例,这样做似乎合乎逻辑)。

问题: 当尝试对准备好的语句执行查询时,它会抛出“致命错误:在非对象上调用成员函数 execute() ...”。

相关代码(经过几个小时的 var_dumps 和 try-catch 将其缩小到此):

连接字符串:

$this->connection = new PDO("sqlite:"._ROOT."/Storage/_sqlite/satori.sdb");

显然,这里的 $connection 变量是类的私有变量。

错误发生在这里(在应该执行数据库插入的函数内):

    try{
        $statement = self::getInstance()->connection->prepare($sql);
    }catch (PDOException $e){
        print $e->getMessage;
    }

    try{
        var_dump($statement);
        $statement->execute($input);
    }catch (Exception $e){
        print $e->getMessage();
    }

更准确地说,它发生在我尝试 $statement->execute($input) 时。

任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: php database sqlite pdo prepared-statement


    【解决方案1】:

    尝试在第一个 try 块之外声明 $statement 变量。例如

    $statement = null;
    
    try{
            $statement = self::getInstance()->connection->prepare($sql);
        }catch (PDOException $e){
            print $e->getMessage;
        }
    
        try{
            var_dump($statement);
            $statement->execute($input);
        }catch (Exception $e){
            print $e->getMessage();
        }
    

    【讨论】:

      【解决方案2】:

      在准备语句时,您可能会收到一个 mySQL 错误,但您没有将 PDO 配置为 throw an exception in case of an error

      <?php
      
        $dbh = new PDO( /* your connection string */ );
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        // . . .
      ?>
      

      【讨论】:

      • 谢谢,这帮助我获得了一些有意义的错误消息并帮助我解决了问题。
      • 谢谢,这解决了我在 GitHub 上构建的“更快”MVC 框架中的问题。
      猜你喜欢
      • 2011-07-13
      • 2011-06-21
      • 2010-11-30
      • 2010-11-05
      • 2014-06-30
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多