PDO Problem -> Call auf eine Memberfunktion auf einem nicht-Objekt

Ich war drehen und verdrehen diesen um das beste aus meinem nicht-vorhandenen PDO-Kenntnisse, aber noch ohne Glück.

code:

function write($id, $data) {
        global $dbcon;

        $id = mysql_real_escape_string($id);
        $data = mysql_real_escape_string($data);
        $sql = $dbcon->exec("INSERT INTO `sessions` 
                                        (`session_id`, `session_data`, 
                                         `session_expire`, `session_agent`, 
                                         `session_ip`, `session_referrer`) 
                                        VALUES
                                        (\"".$id."\", \"".$data."\",
                                         \"".time()."\",\"".($this->session_encryption($_SERVER['HTTP_USER_AGENT']))."\",
                                         \"".($this->session_encryption($_SERVER['REMOTE_ADDR']))."\", \"".($this->session_encryption((isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_^~@&|=+;!,(){}[].?%*#'))))."\")
                                        ON DUPLICATE KEY UPDATE 
                                        `session_data` = \"".$data."\",
                                        `session_expire` = \"".time()."\"");
        return true;
    }

Geben Sie mir die folgende Fehlermeldung:

Fatal error: Call to a member function exec() auf einem nicht-Objekt

auf dem

$sql = $dbcon->exec(

Linie.
Ich habe versucht, dies zu lösen, den ganzen Abend, aber ohne Glück.

Dies ist mein PDO-connection Skript:

require_once(INC_PATH.'/config.php');

$dsn = "$db_type:host=$db_host;port=$db_port;dbname=$db_name;charset=$db_charset";
try{
    $dbcon = new PDO($dsn, $db_user, $db_pass);
    $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //$dbcon = null; //Close database connection.
}
catch(PDOException $e){
    echo $e->getMessage();
}

Hoffe, einer von Euch Art Seelen da draußen kann mir helfen, ich würde schätzen es!

Dank.

UPDATE:
Ich habe einen global.php Datei die wie folgt aussieht:

//Load database
require_once(INC_PATH.'/database.php');

//Load session handler
require_once(INC_PATH.'/class_sessions.php');
$Sessions = new SessionManager();
session_start();

Den database.php enthalten ist vor den Sitzungen der Klasse, und wenn ich eine website, es gibt keine Fehler in diesem Teil der Sitzungen-Klasse (die vor der write-Funktion:

function read($id) {
        global $dbcon;

        $data = '';
        $id = mysql_real_escape_string($id);
        $sql = $dbcon->prepare("SELECT 
                                `session_data` 
                            FROM 
                                `sessions` 
                            WHERE 
                                `session_id` = '".$id."'");

        $sql->execute();

        $a = $sql->columnCount();
        if($a > 0) {
            $row = $sql->fetchObject();
            $data = $row['session_data'];
        }

        return $data;
    }
  • $dbcon ist dann nicht ein Objekt. Ist die "PDO connection script" tatsächlich aufgenommen und ausgeführt? Versuchen echo "dbcon created"; nach $dbcon = new PDO($dsn, $db_user, $db_pass);.
  • Ich habe einen global.php die Datei enthält das sessions-management-Skript (oben) und der PDO-Verbindung Skript. Einen moment, lassen Sie mich versuchen. UPDATE: ich kann es sehen echo es ganz gut.
  • Ist das db-Skript aufgenommen wird als der erste? Auch ich wäre nachlässig, wenn ich nicht sagen, dass Sie sollten es vermeiden, Globale Variablen zu vermeiden. Ich werde nicht ins detail gehen hier drauf, da kann man google und finden Sie eine million Gründe, aber kurz gesagt: Sie schaffen eine Abhängigkeit von etwas, das man nicht immer Steuern, und Sie verringern die code-Portabilität.
  • Ich werde zu aktualisieren meinem ersten post mit mehr info, 2 Sek.:) - vielen Dank !
  • Ich bin ganz neu hier also sorry für die vielleicht sehr offensichtliche Frage: aber wie kann ich vermeiden, dass die globals?
  • wie dieses : stackoverflow.com/questions/130878/...
  • Sie können übergeben, die db-Verbindungs-Variablen die read() und write () - Funktionen. function Lesen($dbcon, $id) { ... }

InformationsquelleAutor MrE | 2011-09-06
Schreibe einen Kommentar