Problem mit PDO

Panzer

Mitglied
Hallo Leute

ich zweifele grade an meinem Verstand :(

habe mich grade mit Prepared Statments für SQL beschäftigt und zu diesem Zweck das Tutorial von Saftmeister hier von der Seite zur Hilfe genommen!
Im prinzip hab ich das komplett verstanden und für mich umgesetzt (soll am Ende in ein OOP Projekt eingebunden werden!)... dann das erstaunen es funktioniert nicht!
Dann habe ich mir einfach mal den Quelltext von Saftmeister kopiert und ihn mit meinen Variablen (Server, DB usw) gefüttert ... leider funktioniert es immer noch nicht!

Quelltext:

PHP:
<?php
$user="xxx";
$password="xxx";

$dbc=newPDO("mysql:host=localhost;dbname=meineDB",$user,$password);

$sql="SELECT vorname AS name FROM user_id WHERE username = :username AND password = :password";
$stmt=$dbc->prepare($sql);

$stmt->bindParam(':username',"test");
$stmt->bindParam(':password',"test");

if($stmt->execute()){
$data=$stmt->fetch(PDO::FETCH_OBJ); // <-- das ist die Line 14

echo$data->userid;
}
$result=null;
$stmt=null;
$dbc=null; 
?>

Bekomme nur einen Parse-Error zurück...

Parse error: syntax error, unexpected T_VARIABLE in oop_Project/test.php on line 14

Kann mir jemand kurz erklären oder aufzeigen wo das Problem liegt?

Gruß an alle und vielen Dank im vorraus!

PS Google und Co hab ich schon bemüht!
 
Hi Sven,

weiss jetzt woran es lag irgendwie hatte er beim kopieren des scripts leerzeichen mit einem anderen zeichen-code oder so übertragen... nach dem ersetzen von allen leerzeichen(habe das ding komplett neu getippt) gibt er keinen error mehr aus :D
allerdings tut er immernoch nicht das was er soll ... aber ich denke da muss ich jetzt erstmal die variablen überprüfen... danke dir aber trotzdem :)

gruß christoph
 
hehe sorry das hatte ich vergessen beim kopieren zu ändern ...

der quellcode sieht jetzt so aus:

PHP:
<?php
$user="xxx";
$password="xxx";
$test ="test";

$dbc = new PDO("mysql:host=localhost;dbname=meineDB",$user,$password);

$sql='SELECT vorname AS blub FROM user_id WHERE username = :username AND password = :password';
$stmt=$dbc->prepare($sql);

$stmt->bindParam( ':username', $test);
$stmt->bindParam( ':password', $test);


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

echo $data->blub;
}
$result=null;
$stmt=null;
$dbc=null;
?>

gibt keinen error ... aber auch kein ergebnis!? es sieht so aus als wenn der bindParam Befehl nicht korrekt ausgeführt wird ... hab ich was übersehen?
habe mir mal die Variable $stmt ausgeben lassen:
object(PDOStatement)#2 (1) { ["queryString"]=> string(87) "SELECT vorname AS blub FROM user_id WHERE username = :username AND password = :password" }

vllt hilft es euch weiter ...

gruß Cristoph
 
Kommt das Script denn überhaupt bei if($stmt->execute()) in den Code-Block rein? Vielleicht solltest du mal eine rudimentäre Fehlerbehandlung einbauen?
 
So hab das problem gelöst! :)

PHP:
	function db_abfrage($sql_request){
	
		global $sql_user;
		global $sql_pass;
		global $sql_db;
		global $gl_error;
		global $gl_error_text;
		
		list($sql_statement, $sql_var) = explode("|",$sql_request);
		$sql_var_array=explode(",",$sql_var);
		
		$test ="test";
			try{
				$dbc = new PDO("mysql:host=localhost;dbname=meineDB", $sql_user, $sql_pass);
			}
			catch(PDOException $e){
				$gl_error=1;
				array_push($gl_error_text, 'Fehler: '.$e->getMessage);
			}
			$stmt=$dbc->prepare($sql_statement);
			$i=1;
			foreach($sql_var_array AS $var){
			$stmt->bindParam($i, $var);
			$i++;
			}
			if($stmt->execute()){
				$data=$stmt->fetchAll();
				return $data;
			}
			else{
				$gl_error=1;
				array_push($gl_error_text, 'Fehler: '.$stmt->errorInfo());
			}
			$result=null;
			$stmt=null;
			$dbc=null;
		}

nun tritt aber ein weiteres problem auf ... der SELECT befehl funtioniert aber der INSERT befehl macht mir noch schwierigkeiten ;)
vllt wisst ihr wo der fehler liegt ...

PHP:
$request = 'INSERT INTO news_id (title,time,author,text) VALUES (?, ?, ?, ?)|test news,'.date("dMY").',ich,text text';

dabei trägt er in die tabelle immer nur die letzte variable ein ... nen tip was ich vllt ver gessen hab?

gruß christoph
 
habe jetzt noch einmal den quellcode überprüft und an verschiedenen stllen probe outputs gemacht und leider nichts feststellen können ... fällt jemand was dazu ein was man an dem statement ändern könnte?

PHP:
	$request = 'SELECT * FROM user_id WHERE nick = ? AND passwort LIKE ?|'.$username.",".$userpass;
 
Zurück