Hallo Community,
ich komme bei einem MySQL Problem nicht weiter...
ich habe folgenden Code:
foreach ($eingelesenesprotokoll as $key2 => $neu) {
$update=0;
$code="";
$werte="";
if($alt[id]==$neu[id]){
if ($alt[protokollpunkt] != $neu[protokollpunkt]){
$update=1;
$lengtalt= strlen($alt[protokollpunkt]);
$lengtneu= strlen($neu[protokollpunkt]);
$proto_neu= substr($neu[protokollpunkt], $lengtalt);
//$proto_neu enthält neue eingabe des kontrukteurs
$code .= "`kommentar_kon` = ? ";
$werte .= '"'.$proto_neu.'"';
}
if ($alt[erledigt] != $neu[erledigt]){
if ($update!=0){
$code.=", ";
$werte.=', ';
}
$update=1;
$code .= "`erledigt` = ? , `erledigt_von` = ? , `erledigt_am` = ? ";
$werte .= '"'.$neu[erledigt].'", "'.$user.'", "'.$heute.'"';
}
if ($alt[merker_kon] != $neu[merker_kon]){
if ($update!=0){
$code.=", ";
$werte.=', ';
}
$update=1;
$code .= "`merker_kon` = ? ";
$werte .= '"'.$neu[merker_kon].'"';
}
if ($alt[melden] != $neu[melden]){
//meldenfunktion
}
//echo $code."<br />";
//echo $werte;
if ($update != 0){
$pdo = new PDO(MYSQL_CONNECT, MYSQL_BENUTZER, MYSQL_KENNWORT);
$pdo->exec("SET NAMES 'UTF8'");
$statement = $pdo->prepare("UPDATE `bilderdatenbank` SET $code WHERE `id` = ?");
var_dump($statement);
echo "<br />";
var_dump($werte);
echo "<br />";
$statement->execute(array($werte, "$neu[id]"));
print_r($statement->errorInfo());
//UPDATE `bilderdatenbank` SET `erledigt`='1' ,`erledigt_von`='rb' ,`erledigt_am`='2017-08-12' ,`merker_kon`='1' ,`kommentar_kon`='mach jetzt' WHERE `id` = '16'
//Dieser Befehl geht im sql
}
}
}
Alles anzeigen
Ich vergleiche hier 2 Arrays die genau gleich aufgebaut sind.
Die IFs erweitern den SQL Befehl wenn die 2 Arrays unterschiedlich sind.
Ist nichts unterschiedlich wird auch kein Update gemacht.
Das vardump vom Statement liefert folgendes:
object(PDOStatement)#3 (1) {
["queryString"]=>
string(141) "UPDATE `bilderdatenbank` SET `kommentar_kon` = ? ,
`erledigt` = ? , `erledigt_von` = ? , `erledigt_am` = ? , `merker_kon` =
? WHERE `id` = ?"
}
Leerzeichen, Backticks, alles ist so wie es sein sollte.
Das vardump von Werte liefert folgendes:
Kurze Erklärung:
Der lange Text ist von einem Textarea, Feld in der DB ist varchar.
Der zweite Wert "1" ist von einem Dropdown welches 0,1 und e enthält. Das Feld ist varchar.
Der dritte Wert wird bei Login gesetzt und kommt aus der Session, DB varchar.
Der vierte Wert spuckt eine Funktion aus und ist immer " heute". Feld in DB ist DATE.
Der letzte Wert ist von einer Checkbox, Feld in DB ist BOOL.
Das Textarea wird vorher nacher verglichen und der neue Teil soll in eine neue Tabellenspalte "kommentar_kon" (varchar) geschrieben werden.
IDs stehen in beiden Arrays und nach denen richtet sich alles.
Mein Problem ist:
Der Code den vardump ausspuckt stimmt ja und wenn ich die ? durch die Werte ersetze und im SQL direkt ausführe geht es ja auch.
UPDATE `bilderdatenbank` SET `erledigt`='1' ,`erledigt_von`='rb' ,`erledigt_am`='2017-08-12' ,`merker_kon`='1' ,`kommentar_kon`='mach jetzt' WHERE `id` = '16'
Das errorinfo spuckt HY093 aus.
Onkel Google sagt, das kann alles sein. Ein Schreibfehler.
Spaltennamen, Leerzeichen, Anführungsstrichchen alles schon probiert.
Falls mir jemand helfen kann.
Danke schonmal.
Gruß Humbi