PHP pdo подготовить в функции возвращает - PullRequest
2 голосов
/ 08 сентября 2010

Каким-то образом моя инструкция execute говорит, что у объекта нет члена "execute". Что не так?

class EdlSqliteDb
{
const SQLITE_DRIVER = "sqlite:";

var $dbh;
var $qIndex = Array();

//
function EdlSqliteDb($dsn) 
{
    try 
    {
        $this->dbh = new PDO(self::SQLITE_DRIVER . $dsn);
    } 
    catch (PDOException $e)
    {
        echo "Error connecting: " . $e->getMessage() . ' ' . self::SQLITE_DRIVER . $dsn;
        die();
    }

    return;
}

//
function addQ($index,$q)
{
    $this->qIndex[$index] = $q;
}

//
function PrepareQ($index)
{
    try
    {
        $stmt = $this->dbh->prepare($this->qIndex[$index]);
    }
    catch (PDOException $e)
    {
        echo "Db Prepare Error: " . $e->getMessage();
        die();
    }
    return $stmt;
}

//
function DbExecutePrepared($index, $arrParameters)
{
    $stmt = $this->PrepareQ($index);
    if ($stmt->execute($arrParameters)) 
    {
        $row = $stmt->fetch();
        return $row;
    }
    else 
    {
        print "<p>dbquery(): database table update execute error</p>\n";
        die();
    }
}

}

Ответы [ 2 ]

8 голосов
/ 08 сентября 2010

Скорее всего, это связано с неудачной подготовкой.

В зависимости от обработки ошибок, PDO вместо выдачи исключения может просто вернуть false.

Если сервер базы данных не может успешно подготовить оператор, PDO :: prepare () возвращает FALSE или выдает исключение PDOException (в зависимости от обработки ошибок).

Не совсем уверен, где определено это поведение,если честно ....

Обновление: вот оно .Поведение по умолчанию - молчаливый сбой.Вам необходимо установить PDO::ATTR_ERRMODE на PDO::ERRMODE_EXCEPTION для исключений, которые будут повышаться всегда .

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
0 голосов
/ 08 сентября 2010

Добавить:

var_dump($stmt);

После того, как:

$stmt = $this->PrepareQ($index);

Возможно, что-то не так с этим, поэтому $this->PrepareQ($index); возвращает ноль, или объект, у которого нет execute метода, var_dump использование переменной поможет узнать, что это за переменная, и отладить эту проблему.

...