PHP PDO SQLite准备了语句问题

时间:2011-01-03 13:22:04

标签: php database sqlite pdo prepared-statement

我正在尝试将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)时会发生这种情况。

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

2 个答案:

答案 0 :(得分:10)

您可能在准备语句时遇到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 );
  // . . .
?>

答案 1 :(得分:2)

尝试在第一个try块之外声明$ statement变量。 e.g。

$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();
    }