PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   PDO problem mit lastinsertID (https://www.php-resource.de/forum/php-developer-forum/102149-pdo-problem-mit-lastinsertid.html)

mo78 06-09-2011 16:55

PDO problem mit lastinsertID
 
Hallo ich Probiere gerade mit PDO ein wenig rum und bin da auf ein kleines problem gestoßen. Also ich möchte eine email adress in meiner DB speichern und mir die letzte Id ausgeben lassen. Also das speichern funzt schonmal soweit aber leider nicht das id auslesen. Hier mal der Code

PHP-Code:

        $email = array(':email'=>$_POST['email']);

        
$sql "INSERT INTO c_email (email) VALUES (:email)";

        
$stmt MyDB::getInstance()->prepare($sql);
        
$stmt->execute($email);
        
$userID MyDB::getInstance()->lastInsertId();
        echo 
$userID

In der Fehlermeldung steht ich die Methode auf kein Objekt anwende wenn ich das mal richtig deute;)

Hier mal die Fehlermeldung original
Code:

Fatal error:  Call to a member function lastInsertId() on a non-object
mfg
mo

Kropff 06-09-2011 17:03

Schuss ins Blaue:
PHP-Code:

$userID $stmt->getInstance()->lastInsertId(); 

Peter

btw: wie hast du die Verbindung aufgebaut? So sollte es laut Doku klappen
PHP-Code:

$db = new PDO(...);
...
$userID $db->lastInsertId(); 


mermshaus 06-09-2011 17:15

Zeig im Zweifel mal den Code der Klasse. getInstance gibt anscheinend kein Objekt zurück.

h3ll 06-09-2011 17:16

Offenbar liefert MyDB::getInstance() beim zweiten mal kein Objekt. Zumindest wenn die Fehlermeldung mit dem Code übereinstimmt.

mo78 06-09-2011 17:16

Die verbindung habe ich mit der Klasse MyDB aufgebaut die die Statische methode getInstance hat. Das ganze sieht so aus.
PHP-Code:

public static function getInstance()
    {
        if(!
self::$db)
        {
            
self::$db = new PDO('mysql:host='.MySQLconfig::DB_HOST.';     dbname='.MySQLconfig::DB_DATABASEMySQLconfig::DB_USERMySQLconfig::DB_PASSWORD,
                                       array(
PDO::ATTR_PERSISTENT => true,
                                             
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ,
                                             
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC)
                                       );
                                       return 
self::$db;
        }
    } 

Was mich verwirrt ist das das insert Statement auch ausgeführt wird.:rolleyes:

mermshaus 06-09-2011 17:35

Was gibt denn getInstance zurück, wenn !self::$db nicht erfüllt ist?

Richtig, gar nichts. ;)

h3ll 06-09-2011 17:35

Du hast außerhalb der if-Bedingung kein return. Also du bekommst nur beim ersten Aufruf ein Datenbankobjekt und dann nur mehr NULL.

Hab ich aber gut geraten :)

mo78 06-09-2011 17:55

Besten dank das return war eine klammer zu früh^^


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:13 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG