MySQL übernimmt Daten nicht immer.

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

MySQL übernimmt Daten nicht immer.

Postby alex18 » 13. April 2011 22:42

Hallo,

ich habe folgendes Problem:
Ich habe ein php-Script geschrieben, das in zwei Tabellen einer Datenbank jeweils 10 Datensätze schreibt.
Anschließend werden diese gelesen und angezeigt.

Führe ich dieses aus, und prüfe das Ergebnis über phpmyadmin, stelle ich fest das nur in eine Tabelle die Datensätze geschrieben wurden.
Es ist mal die eine und mal die andere Tabelle die Fehlt.
Das Datensätze nicht geschrieben wurden kann ich jedoch mit dem Schreiben php-Script nicht feststellen, da dies mir immer alle Datensätze anzeigt.

Denn Inhalt der Tabellen habe ich auch mit einen anderen php-Script stichprobenartig überprüft - phpmyadmin irrt nicht.

Das selbe Problem habe ich beim schreiben von Datensätzen über die c-api-Schnittstelle festgestellt.

Wenn ich nur vereinzelt schreibe habe ich dieses Problem noch nicht festgestellt, der Einbau von Verzögerungen in den Cpp-Programmen brachte jedoch keine Besserung.

Meine Installation ist:
xampp-win32-1.7.4-VC6-installer.exe
auf einen Windows-XP System.

Die my.ini Datei entspricht den Voreinstellungen bis auf datadir, was ich auf ein anderes Verzeichnis verbogen habe.

Ich vermute deshalb das es irgendwelche Einstellparameter beim MySQL-Server gibt die das verursachen.
Was für Einstellungen können da ausschlaggebend sein?
Hat jemand dieses Problem schon gehabt? Wie wurde es da gelöst?
alex18
 
Posts: 3
Joined: 13. April 2011 22:11

Re: MySQL übernimmt Daten nicht immer.

Postby WilliL » 14. April 2011 14:03

Frage mal anders gestellt, da ich vor diesem Problem noch nicht gestanden habe..
was schreibst du wie in mySQL? (mir fallen auf Anhieb 3 Möglichkeiten in PHP ein: mysql, mysqli, pdo)
Testest du nach dem DB-Eintrag, ob der Datensatz eingetragen wurde? benutzt du Klassen?

Kannst du das Script einstelle (Bitte in code tags)
Willi
WilliL
 
Posts: 660
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1

Re: MySQL übernimmt Daten nicht immer.

Postby alex18 » 14. April 2011 20:14

Anbei der php-Code mit den ich den Fehler erhalte.
Dem Script zum Auslesen fehlt lediglich der Teil von:
// Erstellen der 1. Tabelle
und
//auslesen der Datensaetze

Die Tabellen werden zwar erzeugt, das Problem tritt aber ziemlich sicher auf, wenn ich die Tabellen nicht lösche, also in die bestehenden, geleerten Tabellen schriebe.
Interessant ist auch das bei einer Fehlerhaften übernahme dies im schreibenden Script nicht bemerkt wird, was eine Fehlerbehehandlung sehr aufwendig macht.

Der php-Test-Code hat keine Klassen, später sollen jedoch auch Klassen verwendet werden.
Ich sehe es auch eher Programmiersprachenunabhängig, da ich das Problem auch in Cpp mit der c-api hatte.

Code: Select all
<?php
try
{
  $Server = mysql_connect("localhost", "root", "");

  if (!$Server)
  {
    throw new exception("can't connect: ".mysql_error());
  }

  if(true != mysql_select_db("test1", $Server))
  {
    $result = mysql_query('CREATE DATABASE IF NOT EXISTS '."test1", $Server);
    if (!$result)
    {
      throw new exception("Datenbank konnte nicht erstellt werden ".mysql_error());
    }      
  }
  // Erstellen der 1. Tabelle
  if(!mysql_query("CREATE TABLE if not exists tblTest1(test char(15) NOT NULL, testInt INT NULL, Constraint PK Primary Key(test))", $Server))
      throw new exception("Fehler: ".mysql_error());
  // Eintragen von Datensaetzen
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('00', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('01', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('02', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('03', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('04', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('05', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('06', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('07', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('08', 1)", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest1(test, testInt) VALUES('09', 1)", $Server)) throw new exception("Fehler: ".mysql_error());

  // Erstellen der 2. Tabelle
  if(!mysql_query("CREATE TABLE if not exists tblTest2(test char(15) NOT NULL, dt DATE NULL, Constraint PK Primary Key(test))", $Server))
        throw new exception("Fehler: ".mysql_error());
  // Eintragen von Datensaetzen
  if(!mysql_query("INSERT INTO tblTest2(test, dt) VALUES('01', '1979/11/14')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('02')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('03')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('04')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('05')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('06')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('07')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('08')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('09')", $Server)) throw new exception("Fehler: ".mysql_error());
  if(!mysql_query("INSERT INTO tblTest2(test) VALUES('10')", $Server)) throw new exception("Fehler: ".mysql_error());

  echo "<h1>Fertig</h1>";
  echo "<h2>Test1</h2>";
  //auslesen der Datensaetze
  $result = mysql_query("SELECT * FROM tblTest1", $Server);
  if (!$result)
  {
   throw new exception("Datenbank konnte nicht gelesen werden ".mysql_error());
  }      

  while($row=mysql_fetch_array($result))
  {
    echo "test = ".$row['test']."<br>\n";
  }

  echo "<h2>Test2</h2>";
  $result = mysql_query("SELECT * FROM tblTest2", $Server);
  if (!$result)
  {
    throw new exception("Datenbank konnte nicht gelesen werden ".mysql_error());
  }      

  while($row=mysql_fetch_array($result))
  {
    echo "test = ".$row['test']."<br>\n";
  }      
  echo "<br>\n";
  echo '<a href="writeDB_readonly.php">Nur Lesen</a><br><br><br><br><br><br>';
}
catch(exception $Fehler)
{
  echo $Fehler->getMessage()."\n";
}

?>
alex18
 
Posts: 3
Joined: 13. April 2011 22:11

Re: MySQL übernimmt Daten nicht immer.

Postby WilliL » 14. April 2011 21:51

ich habe deinen Script in XAMPP 1.7.5 beta ausprobiert und konnte den Fehler nicht feststellen
a) mit Tabellen Neuanlage
b) in bestehende leere Tabelle

es wurden immer alle Daten in die DB geschrieben - jede Variante mehrfach ausprobiert
Willi
WilliL
 
Posts: 660
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1

Re: MySQL übernimmt Daten nicht immer.

Postby alex18 » 23. April 2011 22:10

Habe das Problem jetzt genauer untersucht:
1. Die Tabellen mit Inhalt werden geschrieben, alles sieht gut aus.
2. Die Tabellen werden in PhpMyAdmin mit dem Mülleimersymbol geleert.
3. Es bleibt eine Kopfleiste wie: "Server: localhost - Datenbank: test1 - Tabelle: tblTest2" stehen.
4. Die Tabellen werden nochmal geschrieben, alles ist O.K. bis auf Tabelle: tblTest2.
5. Die Tabellen werden in PhpMyAdmin mit dem Mülleimersymbol nochmal geleert.
Anschließend wird die Datenbank ausgewählt, so das Kopfleiste lautet: "Server: localhost - Datenbank: test1".
6. Die Tabellen mit Inhalt werden geschrieben, alles sieht gut aus.

Ich habe dies auf einen Windows und einen Linux-System beobachtet. Es sieht so aus als ob PhpMyAdmin in bestimmten Situationen eine Datenübernahme verhindert. Dies scheint zu passieren, wenn man eine Tabelle löscht und anschließend nicht wechselt. Dies Art der Anwendung kommt beim Debuggen vor, weshalb es vielleicht noch nicht bemerkt wurde.

Wer will kann dies gerne Testen, ich halte den Fehler für unschön aber nicht kritisch, da er im Regelbetrieb nicht auftritt.
alex18
 
Posts: 3
Joined: 13. April 2011 22:11


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 14 guests