PHP, PDO - Problem mit dem Schreiben von Datenänderungen
Moin!
ich habe eine kleine Webanwendung und möchte nun Daten mittels PDO in einer SQLite ändern. Das Auslesen der DB funktoniert. Also so ganz falsch liegen kann ich nicht!
Hier erst einmal mein "Codegerippe":
Dann der Teil für das Schreiben der Daten wobei die Statements dynamisch generiert werden. Die "zusammengesetzten" Teile werde ich als Rückmeldung unten noch anfügen.
Hier nun die Kontrollausgabe:
PDO_statement:= UPDATE `RECHNER` SET `PCNUMMER` = :PCNUMMER,`ID_BETRIEBSSYSTEME` = :ID_BETRIEBSSYSTEME,`ID_ANWENDER` = :ID_ANWENDER,`ID_SACHGEBIETE` = :ID_SACHGEBIETE,`ID_BEREICHE` = :ID_BEREICHE,`CONFIG` = :CONFIG,`IS_STANDARD_TB` = :IS_STANDARD_TB,`IS_AKTIV` = :IS_AKTIV,`ANMERKUNG` = :ANMERKUNG WHERE `id` = :id
update:
PDOStatement Object ( [queryString] => UPDATE `RECHNER` SET `PCNUMMER` = :PCNUMMER,`ID_BETRIEBSSYSTEME` = :ID_BETRIEBSSYSTEME,`ID_ANWENDER` = :ID_ANWENDER,`ID_SACHGEBIETE` = :ID_SACHGEBIETE,`ID_BEREICHE` = :ID_BEREICHE,`CONFIG` = :CONFIG,`IS_STANDARD_TB` = :IS_STANDARD_TB,`IS_AKTIV` = :IS_AKTIV,`ANMERKUNG` = :ANMERKUNG WHERE `id` = :id ) bind:= :PCNUMMER
cdata:= RW15-PC-002
bind:= :ID_BETRIEBSSYSTEME
cdata:= 3
bind:= :ID_ANWENDER
cdata:= 38
bind:= :ID_SACHGEBIETE
cdata:= 8
bind:= :ID_BEREICHE
cdata:= 6
bind:= :CONFIG
cdata:= SGaa
bind:= :IS_STANDARD_TB
cdata:= 1
bind:= :IS_AKTIV
cdata:= 1
bind:= :ANMERKUNG
cdata:= XXXXXX
Am Ende wird die Meldung
Die Nachricht wurde überschrieben.//
ausgegeben. Wenn ich nun aber die Datenbank in DB Browser öffne, dann werden die ursprünglichen Daten angezeigt.
Kann mir einer weiterhelfen? Stehe mehr als auf dem Schlauch.
Gruß Jan
PS: ich habe mich zwischenzeitlich mit einem INSERT auseinander gesetzt und das hat funktioniert. Es muss also ein Fehler innerhalb meiner Definition sein. Der DB-Zugriff an sich muss funktionieren. Wenigstens etwas. .-)
ich habe eine kleine Webanwendung und möchte nun Daten mittels PDO in einer SQLite ändern. Das Auslesen der DB funktoniert. Also so ganz falsch liegen kann ich nicht!
Hier erst einmal mein "Codegerippe":
<?php
// Database name
$database_name = "Organisation_Develop.db";
// Database Connection
try
{
$db = new PDO('sqlite:' . $database_name);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$db = new PDO('sqlite:' . $database_name,[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
var_dump($db);
}
catch ( PDOException $ex)
{
echo $ex->getMessage();
}
// Schreibrechte überprüfen
if (!is_writable($database_name)) {
// Schreibrechte setzen
chmod($database_name, 0777);
}
?>
Dann der Teil für das Schreiben der Daten wobei die Statements dynamisch generiert werden. Die "zusammengesetzten" Teile werde ich als Rückmeldung unten noch anfügen.
public function PDO_CreateSQL2Update($index){
$PDO_statement = "UPDATE `".$this->tabelle."` SET ";
$seperator_statement = "";
foreach ($this->controls as $control)
{
if ($control["column"] != "ID"){ //ID übergeben
// prepare() bereitet die Anweisung für die Ausführung vor.
$PDO_statement .= $seperator_statement."`".$control["column"]."` = :".$control["column"];
$seperator_statement = ",";
}//endif
}//end-foreach
// ID anhängen mit dem WHERE ....
$PDO_statement .= " WHERE `id` = :id";
echo "PDO_statement:= ".$PDO_statement."<br>\n";
// try {
$update = $this->db->prepare($PDO_statement);
// } catch (Exception $e) {
// echo 'Exception abgefangen: ', $e->getMessage(), "\n";
// }
echo "update:<br>\n";
print_r($update);
foreach ($this->controls as $control)
{
$befehl = ":".$control["column"];
echo "bind:= ".$befehl."<br>\n";
echo "cdata:= ".$this->cdata[$control["column"]]."<br>\n";
$update->bindValue(":".$control["column"], $this->cdata[$control["column"]]);
}//end-foreach
$update->bindValue(":id", $index);
// $update->execute() führt die vorbereitete Anweisung aus.
if ($update->execute()) {
$this->CreateSideContainer();
echo '<p>Die Nachricht wurde überschrieben.</p>';
echo "<p><a href='".strtolower($this->tabelle).".php?status=list".$this->CreateUrlLfdNr()."'>".$this->title." auflisten</a></p>\n";
echo "</div>\n";
exit;
} else {
// SQL-Fehlermeldung anzeigen.
$this->CreateSideContainer();
print_r($update->errorInfo());
echo "</div>\n";
} // endif
}//end-CreateSQL2Update
Hier nun die Kontrollausgabe:
PDO_statement:= UPDATE `RECHNER` SET `PCNUMMER` = :PCNUMMER,`ID_BETRIEBSSYSTEME` = :ID_BETRIEBSSYSTEME,`ID_ANWENDER` = :ID_ANWENDER,`ID_SACHGEBIETE` = :ID_SACHGEBIETE,`ID_BEREICHE` = :ID_BEREICHE,`CONFIG` = :CONFIG,`IS_STANDARD_TB` = :IS_STANDARD_TB,`IS_AKTIV` = :IS_AKTIV,`ANMERKUNG` = :ANMERKUNG WHERE `id` = :id
update:
PDOStatement Object ( [queryString] => UPDATE `RECHNER` SET `PCNUMMER` = :PCNUMMER,`ID_BETRIEBSSYSTEME` = :ID_BETRIEBSSYSTEME,`ID_ANWENDER` = :ID_ANWENDER,`ID_SACHGEBIETE` = :ID_SACHGEBIETE,`ID_BEREICHE` = :ID_BEREICHE,`CONFIG` = :CONFIG,`IS_STANDARD_TB` = :IS_STANDARD_TB,`IS_AKTIV` = :IS_AKTIV,`ANMERKUNG` = :ANMERKUNG WHERE `id` = :id ) bind:= :PCNUMMER
cdata:= RW15-PC-002
bind:= :ID_BETRIEBSSYSTEME
cdata:= 3
bind:= :ID_ANWENDER
cdata:= 38
bind:= :ID_SACHGEBIETE
cdata:= 8
bind:= :ID_BEREICHE
cdata:= 6
bind:= :CONFIG
cdata:= SGaa
bind:= :IS_STANDARD_TB
cdata:= 1
bind:= :IS_AKTIV
cdata:= 1
bind:= :ANMERKUNG
cdata:= XXXXXX
Am Ende wird die Meldung
Die Nachricht wurde überschrieben.//
ausgegeben. Wenn ich nun aber die Datenbank in DB Browser öffne, dann werden die ursprünglichen Daten angezeigt.
Kann mir einer weiterhelfen? Stehe mehr als auf dem Schlauch.
Gruß Jan
PS: ich habe mich zwischenzeitlich mit einem INSERT auseinander gesetzt und das hat funktioniert. Es muss also ein Fehler innerhalb meiner Definition sein. Der DB-Zugriff an sich muss funktionieren. Wenigstens etwas. .-)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 386810
Url: https://administrator.de/contentid/386810
Ausgedruckt am: 22.11.2024 um 15:11 Uhr