PDO Klassenproblem

newwarrior

Erfahrenes Mitglied
Servus,

habe ein kleines Problem, und zwar habe ich für meine Webseite eine User Klasse geschrieben, worüber die Anmeldung läuft.

Hiermal der Aufruf meine DB CON:

PHP:
$dbh = new PDO("mysql:host=$DB_DATA_HOST;dbname=$DB_DATA_DATABASE", $DB_DATA_USER, $DB_DATA_PASSWORD);

Folgendes ist der Klassenaufruf:

PHP:
//CREATE NEW CREATE OBJ
$create_user = new user($dbh);
$create_user->USERNAME = $_POST['username'];
$create_user->PASSWORD = md5($_POST['password']);
$create_user->EMAIL = $_POST['email'];
$create_user->REGISTER_DATE = time();

if($create_user->createUser())
	$content_var .= $MESSAGE_SUCCESS['register'];

Dann haben wir noch die Klasse:

PHP:
public function __construct($dbh)
{
$this->dbh = $dbh;
}

public function createUser()
{
$ZERO = 0;
$this->OPERATION = true;
$this->ACTIVATE_KEY = $this->createRandomKey(25);

$sth = $this->dbh->prepare('INSERT INTO user(username, password, email, active, activate_key, register_date) VALUES(?,?,?,?,?,?)');
$sth->bindParam(1, $this->USERNAME, PDO::PARAM_STR);
$sth->bindParam(2, $this->PASSWORD, PDO::PARAM_STR);
$sth->bindParam(3, $this->EMAIL, PDO::PARAM_STR);
$sth->bindParam(4, $this->ZERO, PDO::PARAM_INT);
$sth->bindParam(5, $this->ACTIVATE_KEY, PDO::PARAM_STR);
$sth->bindParam(6, $this->REGISTER_DATE, PDO::PARAM_INT);
$sth->execute();

So ich bekomme keine Fehlermeldung und auch keinen Abbruch oder NOTICE, jedoch geschieht kein Eintrag in der DB.
Habe mir auch mit var_dump() alle Attribute ausgeben lassen sowie die DB CON und alles stimmt, kann es mir daher nicht erklären.

Danke für die Hilfe...
 
Da du PDO als Klasse benutzt, wird da evtl. eine Exception geworfen worden sein. Hast du schon

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

eingestellt damit die Standard-PHP-Konfiguration überschrieben wird, das keine Fehlermeldungen angezeigt werden?

Desweiteren solltest du um den Insert ein try-catch packen:

PHP:
try
{
  if($create_user->createUser())
    $content_var .= $MESSAGE_SUCCESS['register'];  
}
catch(Exception $e)
{
  echo $e->getMessage();
}
 
Hi,

danke für deine Antwort.
Habe versucht die Dinge umzusetzten.
Jedoch hat sich nichts verändert.
Bekomme immer noch keine Meldung und der Eintrag geschieht immer noch nicht.
 
Fehler gefunden.
Könnte mich selber schlagen!

Heißt $ZERO und nicht $this->ZERO.
$ZERO ist eine lokale Variable und keine Instanzvariable.

Danke für die Hilfe.
 
Ja, das ist wirklich noch ein Problem von PHP. Es gibt keine Möglichkeit, herauszufinden, ob ein Fehler durch nicht-existierende Member-Properties zustande kommt, da man zur Laufzeit einfach neue Members hinzufügen kann. Auch die Abfrage auf eine nicht existente Member-Variable führt zu keinem Warning. Eigentlich sollte man das mal als Change requesten. Der Right-Operand muss existieren, oder eine Warnung wird produziert.

Edit: Man sollte evtl. aber auch das execute() abfragen:

PHP:
$sth = $this->dbh->prepare('INSERT INTO user(username, password, email, active, activate_key, register_date) VALUES(?,?,?,?,?,?)');
$sth->bindParam(1, $this->USERNAME, PDO::PARAM_STR);
$sth->bindParam(2, $this->PASSWORD, PDO::PARAM_STR);
$sth->bindParam(3, $this->EMAIL, PDO::PARAM_STR);
$sth->bindParam(4, $this->ZERO, PDO::PARAM_INT);
$sth->bindParam(5, $this->ACTIVATE_KEY, PDO::PARAM_STR);
$sth->bindParam(6, $this->REGISTER_DATE, PDO::PARAM_INT);
if( ! $sth->execute() )
  throw new Exception("Inserting new user failed!");
 
Zuletzt bearbeitet:
Zurück