• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] PDO: Insert mit Prepared Statements schlägt fehlt

T

ToM80

Guest
Moin,

ich habe mal wieder ein PHP Problem. Das Verhalten ist entweder merkwürdig oder ich sehe den Wald vor lauter Bäumen nicht.
Ich möchte Daten per prepared Statements in die DB einfügen. Das klappt soweit auch, nur dass immer der letzte Wert in alle Felder eingetragen wird :(
Hier mein Script:

PHP:
	$tbl="tbl_user";
	$setArr=array(
		"userName"=>$params['userName'],
		"userPass"=>$params['userPass'],
		"userEmail"=>$params['userEmail'],
		"userRole"=>$params['userRole']
	);
	$paramsArr=array(
			"set"=>$setArr,
			"table"=>$tbl
	);
	$sql=buildQuery("i", $paramsArr);
        /* ANTWORT SQL:
        INSERT INTO tbl_user (userName, userPass, userEmail, userRole) VALUES (?, ?, ?, ?)
        */
	$q=$db->prepare($sql);
	$e=1;
	foreach ($paramsArr['set'] as $key => $value) {
		$q->bindParam($e,$value);
		$e++;
	}
	if ($q->execute()) {
		return "succInsertUser1";
	} else {
		return "errInsertUser1";
	}
Ich habe mir aus Sicherheit mal die foreach-Schleife fürs binding mitgeschrieben.
Hier kommt folgendes heraus:
Code:
    1=>Musterman
    2=>test12
    3=>muster@mann.de
    4=>3
Jedoch steht nun in der Datenbank in den vier Spalten (userName,userPass,userEmail,userRole) überall eine 3.

HINWEIS: Das Password, wird entgegen der o. g. ansicht verschlüsselt gespeichert, zur Verdeutlichung ist sicherlich obriges angenehmer zu lesen

Was mache ich falsch? Ich binde doch jedes ? mit dem korrekten Wert. Warum wird dennoch immer nur der letzte Wert bei allen Feldern eingetragen?

Vielen Dank schonmal für Eure Hilfe :)
 
Nimm bindValue() anstelle von bindParam(). Mit bindParam bindest du $value eben als Variable!

LG jspit
 
Perfekt, das wars :) Habe gerade beim nachsehen den Unterschied nochmal gefunden. Danke für den Tip
 
Zurück
Oben