jan99
Goto Top

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":

<?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. .-)

Content-ID: 386810

Url: https://administrator.de/contentid/386810

Ausgedruckt am: 22.11.2024 um 15:11 Uhr