Hilfe bei Prepared Statements und Klassen

Ich möchte ein vorhandenes Script etwas umschreiben.
Leider bekomme ich eine Fehlermeldung und ich weiß nicht wirklich was ich falsch mache. Kommt vermutlich auch daher dass ich mit OOP bisher so gut wie nichts gemacht habe.
Hier mal mein ursrünglicher Code:

config.php
PHP:
class connect { 

public function mysql_verbinden() 
{ 
$user = "testuser"; 
$password = "testpasswort"; 

$verbindung = new PDO("mysql:host=localhost;dbname=test", $user, $password); 
} 
}

funktionen.php
PHP:
require ('config/config.php'); 

function holeBenutzerId($benutzername) 
{ 
    $test = new connect(); 
    $test->mysql_verbinden(); 

    $sql = "SELECT benutzerid FROM benutzer WHERE benutzername = :benutzername"; 

    $stmt = $verbindung->prepare($sql); 


    $stmt->bindParam( ':benutzername', $benutzername); 




    $result = $stmt->execute(); 
    $data = $result->fetch(PDO::FETCH_OBJ); 

    echo $data->benutzerid; 

$result = null; 
$stmt = null; 
$verbindung = null; 
}



dann habe mal versucht ein paar verbesserungen umzusetzten
bin aber nicht arg weit gekommen *schäm*

jetzt sieht es so aus:
PHP:
class Connection {

public $connect;  


public function Connection()    // Konstruktor der automatisch verbindet 
{
$user = "testuser";
$password = "testpasswort";

$this->connect = new PDO("mysql:host=localhost;dbname=cdcol", $user, $password);
}



function holeBenutzerId($benutzername)
{
    $sql = "SELECT benutzerid FROM benutzer WHERE benutzername = :benutzername";

    $stmt = $this->connect->prepare($sql);


    $stmt->bindParam( ':benutzername', $benutzername);




        $result = $stmt->execute();
    $data = $result->fetch(PDO::FETCH_OBJ);

    echo $data->benutzerid;

$this->result = null;
$this->stmt = null;
$this->connect = null;
}


jetzt kommt folgender fehler:
Fatal error: Call to a member function fetch() on a non-object in


könnt ihr mir vielleicht helfen?
hab ich den code überhaupt beim 2ten versuch verbessert!?
wie würdet ihr es machen?
 
PHP:
$data = $result->fetch(PDO::FETCH_OBJ);

Diese Funktion wird nicht gefunden. Entweder nicht richtig/garnicht includet oder es gibt diese Funktion halt nicht. (Diese Aussage zählt nur wenn das was du gepostet hast das komplette Script ist)
 
Die Methode execute() liefert nur einen Booleschen Wert über den Erfolg der Abfrage. Die fetch()-Methode ist aber Teil eines PDOStatement-Objekts, muss also in deinem Fall aus $this->stmt erfolgen.


Hier stehts aber auch so wie ich es hatte:
http://www.tutorials.de/forum/php-t...enbankzugriffe-durch-prepared-statements.html

Davon abgesehen gehts trotzdem noch nicht, immer noch der gleiche fehler
habe jetzt stehen:
PHP:
$data = $this->stmt->fetch(PDO::FETCH_OBJ);
 
ok hab ich gemacht

kannst du mir trotzdem nicht weiterhelfen denn wie gesagt besteht der fehler immer noch


EDIT:
ok ich habs, es muss lauten
PHP:
$data = $stmt->fetch(PDO::FETCH_OBJ);
 
Zuletzt bearbeitet:
herzlichen dank :)
hab es auch selber herausgefunden, dass execute() nur einen Booleschen Wert über den Erfolg der Abfrage liefert


habe jetzt aber noch eine frage zu weiteren methoden in der Klasse
bis jetzt sieht es so aus:

PHP:
class Connection {

public $connect;


public function Connection()
{
$user = "root";
$password = "";

try
{
  $this->connect = new PDO("mysql:host=localhost;dbname=cdcol", $user, $password);
}
catch (PDOException $e)
{
  echo 'Fehler beim Öffnen der Datenbank: ' . $e->getMessage();
}
}


function holeBenutzerId($benutzername)
{
   $sql = "SELECT benutzerid FROM benutzer WHERE benutzername = :benutzername";

	$stmt = $this->connect->prepare($sql);
	$stmt->bindParam( ':benutzername', $benutzername);
	$stmt->execute();
	$data = $stmt->fetch();
	return $data;
}

function Rights($typ)
{
	$benutzerid = new Connection();
	$benutzerid->holeBenutzerId($_SESSION['benutzername']);
	echo var_dump($benutzerid);

	$stmt = $this->connect->prepare($sql);
	$stmt->bindParam( ':benutzerid', $benutzerid);    // ZEILE DES FEHLERS
	$result = $stmt->execute();
	if(!$stmt) echo "FEHLER BEI ABFRAGE (rechte): " . mysql_error() . "<br";

	$data = $stmt->fetch();
}
}

thoeretisch müsste doch $benutzerid die ID zurückliefern welche in der ersten Methode herausgefunden wurde.
Leider liefert es bei mir folgendes zurück:
object(Connection)#3 (1) { ["connect"]=> object(PDO)#4 (0) { } }

Ich denke ich habe in der 2ten Methode bestimmt die erste falsch aufgerufen, denn es kommt folgende Fehlermeldung
Catchable fatal error: Object of class Connection could not be converted to string in...
Was mache ich nun wieder falsch!?

Abgesehen davon kann ich sonst noch etwas verbessern?
 
Zuletzt bearbeitet:
Zurück