2011-01-01 18 views
0

Ich frage mich, warum, wenn ich eine SQL-Abfrage ADODB in Seite eine Funktion setzte sie die folgenden Fehler erzeugt:ADODB in einer Funktion aufrufen?

Fatal error: Call to a member function Execute() on a non-object in -path to script- 

Meine Funktion wie etwas ist:

$dsn = 'mysql://user:[email protected]/db'; 
$db = ADONewConnection($dsn); 

function getem($q){ 
$r=$db->Execute($q); 
return $r->RecordCount(); 
} 

echo getem("select * from table"); 

Irgendwelche Ideen, wie das beheben ?

Antwort

4

Variable Scope Ausgabe

Sie müssen $db Instanz in Ihrer Funktion global Schlüsselwort importieren:

function getem($q){ 
    global $db; 

    $r=$db->Execute($q); 
    return $r->RecordCount(); 
} 

, die den Trick tun sollten.

Mehr Info:

+0

Nicht sicher betrachten wickeln, warum es nicht für mich gemacht hat :( – Ryan

+0

@ David: War Instanz erstellt gut? 'var_dump ($ db);' – Sarfraz

+0

Ok, es funktioniert, nvm :) – Ryan

2

variable scope issue

innerhalb der Funktion, die lokalen Variablen von $db nicht definiert

hässlich fix ist global zu verwenden, wie

function getem($q) 
{ 
    global $db; 
    $r=$db->Execute($q); 
    return $r->RecordCount(); 
} 

Oder Sie können die adodb als statische Klasse wie

class db 
{ 
    protected static $db; 

    public static function execute($query) 
    { 
    if (!self::$db) // or check object instance type 
    { 
     self::$db = ADONewConnection('mysql://user:[email protected]/db'); 
    } 

    return self::$db->execute($query); 
    } 
} 

function getem($q) 
{ 
    $r=db::execute($q); 
    return $r->RecordCount(); 
} 
Verwandte Themen