2010-09-08 12 views
1

D'une certaine manière mon instruction execute indique que l'objet n'a pas de membre "execute". Qu'est-ce qui ne va pas?php pdo préparer dans une fonction renvoie

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

}

Répondre

7

Ceci est probablement dû à une préparation ayant échoué.

En fonction du traitement des erreurs, PDO, au lieu de déclencher une exception, may just return false.

Si le serveur de base de données ne peut pas préparer avec succès la requête, PDO :: prepare() retourne FALSE ou émet PDOException (en fonction de la gestion des erreurs).

Pas tout à fait sûr où ce comportement est défini, pour être honnête ....

Mise à jour:here it is. Le comportement par défaut est d'échouer en mode silencieux. Vous devez définir PDO::ATTR_ERRMODE à PDO::ERRMODE_EXCEPTION pour les exceptions à augmenter à tout moment.

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

S'il vous plaît noter: j'ai mis '$ dbh-> setAttribute (AOP :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION)' et également exécuter dans une situation où 'PDO :: prepare()' 'faux est de retour 'sans lever d'exception. PHP ne définit pas quand vous devriez vous attendre à une exception ou 'false'. –

0

Ajouter:

var_dump($stmt); 

Après:

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

Probablement, il y a quelque chose de mal avec elle si $this->PrepareQ($index); retourne nul, ou un objet qui n'a pas de méthode execute , var_dump ing la variable aidera à savoir ce que va Riable est et débogage ce problème.