Hey Leute,
bin gerade dabei eine Funktion zu schreiben, die die INSERT INTO - Funktion verallgemeinert ... hat als Funktion
Zur Zeit sieht sie so aus:
... und so rufe ich sie auf ...
Bitte die ganzen Echo und var_dump ignorieren - alles Maßnahmen der Fehlersuche.
Außerdem sollte zu wissen sein, dass diese Funktion in einer Klasse steht. Deswegen kann sie auch auf die Variable
zugreifen, in der eine PDO-Verbindung gespeichert ist.
Nun aber zum eigentlichen Problem. Die Funktion läuft ohne Probleme ab - keine Fehlermeldungen von PHP aus. Doch wenn ich in die Datenbank schaue, sehe ich in jeder Spalte den Wert 'child', also der Wert, der eigentlich nur beim letzten Parameter sein sollte.
Ich dachte mir, dass es vllt. an der bindParam-foreach Schleife liegen könnte, verstehe aber nicht, was falsch sein sollte.
Der SQL-String sieht so aus:
Und die Tabelle so:
... die eingeschriebenen Datensätze sehen dann so aus ...
Hat irgendeiner von euch eine Idee, warum er nicht die richtigen Werte bindet?
Danke jetzt schonmal.
bin gerade dabei eine Funktion zu schreiben, die die INSERT INTO - Funktion verallgemeinert ... hat als Funktion
Zur Zeit sieht sie so aus:
PHP-Code:
/*
* Diese Funktion fügt neue Datensätze in eine vorhandene Tabelle ein
*
* Parameter:
*
* @param: tableName -> Name der Tabelle, in die die Werte eingeschrieben werden sollen
* @param: tableValue -> [ARRAY] Die Werte, die eingetragen werden sollen.
* Die Indexies sind die Spaltennamen der Reihenfolge
* Die dazugehörigen Werte, die Werte, die eingetragen werden sollen.
*
* Rückgabe: Erfolgreich: 'INSERT'
* Misserfolg: 'ERROR'
*/
public function insertTableData( $p_tableName, $p_tableValues )
{
try {
// Index $i definieren
$i = 0;
// SQL - Teil I
$sql = 'INSERT INTO '.$p_tableName.' (';
// SQL - Teil II
foreach ( $p_tableValues as $col => $val )
{
if( $i == 0 )
{
$sql = $sql.''.$col;
}
else
{
$sql = $sql.', '.$col;
}
$i++;
}
// SQL - Teil III
$i = 0;
$sql = $sql.') VALUES ( ?';
foreach ( $p_tableValues as $val )
{
if( $i > 0 )
{
$sql = $sql.', ?';
}
$i++;
}
$sql = $sql.');';
// Statement vorbereiten
echo $sql;
$stm = $this->connection->prepare( $sql );
// Parameter definieren
$i = 1;
foreach ( $p_tableValues as $val )
{
$stm->bindParam( $i, $val );
echo $val.' ';
$i++;
}
var_dump( $stm );
var_dump( $stm->execute() );
return 'INSERT';
}
catch ( PDOExeption $e )
{
return parent::writeError( $e, $this->usingFile );
}
}
PHP-Code:
$values = array( 'userName' => $p['userName'],
'userPassword' => hash( 'sha256', $p[ 'password' ] ),
'userMail' => $p[ 'mail' ],
'userGroup' => 'child' );
$writeIn = $connection->insertTableData( 'user', $values );
Außerdem sollte zu wissen sein, dass diese Funktion in einer Klasse steht. Deswegen kann sie auch auf die Variable
PHP-Code:
$this->connection
Nun aber zum eigentlichen Problem. Die Funktion läuft ohne Probleme ab - keine Fehlermeldungen von PHP aus. Doch wenn ich in die Datenbank schaue, sehe ich in jeder Spalte den Wert 'child', also der Wert, der eigentlich nur beim letzten Parameter sein sollte.
Ich dachte mir, dass es vllt. an der bindParam-foreach Schleife liegen könnte, verstehe aber nicht, was falsch sein sollte.
Der SQL-String sieht so aus:
Code:
INSERT INTO user (userName, userPassword, userMail, userGroup) VALUES ( ?, ?, ?, ?);
Code:
user userID | userName | userPassword | userMail | userGroup
Code:
userID | userName | userPassword | userMail | userGroup 1 child child child child
Hat irgendeiner von euch eine Idee, warum er nicht die richtigen Werte bindet?
Danke jetzt schonmal.
Kommentar