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. .-)
Please also mark the comments that contributed to the solution of the article
Content-Key: 386810
Url: https://administrator.de/contentid/386810
Printed on: April 25, 2024 at 13:04 o'clock