WiMu: Doppelte Einträge bei AUTO_INCREMENT (MySQL)

Liebes Forum,

ich probiere nun schon seit Stunden rum, aber den Fehler kriege ich nicht weg. Sobald ich einer Tabellenspalte (z.B. "id") in der MySQL-Datenbank die AUTO_INCREMENT-Funktion zuweise, werden per INSERT eingefügte Werte zweimal eingetragen, also beispielsweise mit der id 1 und 2. Bei der Fehlersuche bin ich jetzt soweit, das script auf den denkbar simpelsten Fall zu reduzieren, aber selbst da passiert das - eine Tabelle mit nur einem einzigen Feld "id" und wenn ich per PHP was eintrage wird das doppelt abgespeichert. Das passiert sowohl bei mir lokal, als auch auf dem webserver. Das PHP-script, das ich verwende sieht so aus:

$mysqli = new mysqli(datenbankserver, benutzer, passwort, datenbank);  
$mysqli->query("INSERT INTO `test` (`id`) VALUES (NULL)");  
$mysqli->close();

und der phpMyAdmin SQL Dump so:

  
-- phpMyAdmin SQL Dump  
-- version 3.5.2-rc1  
-- http://www.phpmyadmin.net  
--  
-- Host:  
-- Erstellungszeit: 01. Apr 2014 um 13:42  
-- Server Version: 5.1.72-0ubuntu0.10.04.1  
-- PHP-Version: 5.3.2-1ubuntu4.21  
  
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";  
SET time_zone = "+00:00";  
  
  
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;  
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;  
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;  
/*!40101 SET NAMES utf8 */;  
  
--  
-- Datenbank: `db_test`  
--  
  
-- --------------------------------------------------------  
  
--  
-- Tabellenstruktur für Tabelle `test`  
--  
  
CREATE TABLE IF NOT EXISTS `test` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  PRIMARY KEY (`id`)  
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;  
  
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;  
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;  
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;  

Viel rudimentärer geht's nicht ... und trotzdem kriege ich zwei neue Datensätze, id 1 und id 2. Das passiert nicht, wenn ich bei VALUES einen hardcodierten Wert eintrage, aber das ist ja nicht Sinn der Sache. Ratlos.

Vielleicht könnt ihr mir ja helfen ... vielen Dank im vorraus,
WiMu

  1. Hi,

    Das PHP-script, das ich verwende sieht so aus:

    $mysqli = new mysqli(datenbankserver, benutzer, passwort, datenbank);

    $mysqli->query("INSERT INTO test (id) VALUES (NULL)");
    $mysqli->close();

      
    Und wird wie aufgerufen?  
      
    
    > und trotzdem kriege ich zwei neue Datensätze, id 1 und id 2.  
      
    Vermutlich, weil dein Script zwei mal aufgerufen wird.  
      
    Leere src- oder href-Attribute bei in ein HTML-Dokument eingebetteten Ressourcen wie Bildern, CSS, Scripten … sind immer beliebte Kandidaten für sowas.  
      
    
    > Das passiert nicht, wenn ich bei VALUES einen hardcodierten Wert eintrage  
      
    Logisch, dann bekommst du ja beim zweiten Versuch die selbe ID einzutragen einen Fehler.  
      
    MfG ChrisB  
      
    
    -- 
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    
    1. Hi, erstmal vielen Dank für die schnelle Hilfe,

      es ist wirklich nur das - kein Bild, kein stylesheet oder javascript, noch nichtmal html. Einzig dieses Schnipselchen PHP, das ich in einer Datei "test.php" abgespeichert habe und mit firefox (im chrome passiert das aber auch) öffne. An .htaccess und irgend welche redirects oder so hatte ich auch schon gedacht, aber da ist nichts ...

      Liebe Grüße,
      WiMu

      Hi,

      Das PHP-script, das ich verwende sieht so aus:

      $mysqli = new mysqli(datenbankserver, benutzer, passwort, datenbank);

      $mysqli->query("INSERT INTO test (id) VALUES (NULL)");
      $mysqli->close();

      
      >   
      > Und wird wie aufgerufen?  
      >   
      > > und trotzdem kriege ich zwei neue Datensätze, id 1 und id 2.  
      >   
      > Vermutlich, weil dein Script zwei mal aufgerufen wird.  
      >   
      > Leere src- oder href-Attribute bei in ein HTML-Dokument eingebetteten Ressourcen wie Bildern, CSS, Scripten … sind immer beliebte Kandidaten für sowas.  
      >   
      > > Das passiert nicht, wenn ich bei VALUES einen hardcodierten Wert eintrage  
      >   
      > Logisch, dann bekommst du ja beim zweiten Versuch die selbe ID einzutragen einen Fehler.  
      >   
      > MfG ChrisB  
      >   
      > 
      
      1. Hi,

        bitte zitiere sinnvoll, wenn du dich konkret auf einen Teil des Vorpostings beziehst – aber nicht einfach alles.

        Einzig dieses Schnipselchen PHP, das ich in einer Datei "test.php" abgespeichert habe und mit firefox (im chrome passiert das aber auch) öffne. An .htaccess und irgend welche redirects oder so hatte ich auch schon gedacht, aber da ist nichts ...

        Dann schau mal mit den Developer Tools deines Browsers nach, ob wirklich nur ein Script-Aufruf erfolgt, um das als Ursache ausschließen zu können.

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
        1. Hi,

          Dann schau mal mit den Developer Tools deines Browsers nach, ob wirklich nur ein Script-Aufruf erfolgt, um das als Ursache ausschließen zu können.

          Und als nächstes kommt dann der Blick ins Access-Log des Webservers dran.

          MfG ChrisB

          --
          Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
          1. Hi,

            Dann schau mal mit den Developer Tools deines Browsers nach, ob wirklich nur ein Script-Aufruf erfolgt, um das als Ursache ausschließen zu können.

            Und als nächstes kommt dann der Blick ins Access-Log des Webservers dran.

            jupp, Tatsache - daran liegt's. Firefox sagt:

            GET http://localhost/test.php [HTTP/1.1 200 OK 80ms]
            irgendwelches Gedöhnse
            GET http://localhost/test.php [HTTP/1.1 200 OK 30ms]

            und der server sagt:

            127.0.0.1 - - [01/Apr/2014:14:29:25 +0200] "GET /test.php HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0"
            127.0.0.1 - - [01/Apr/2014:14:29:25 +0200] "GET /test.php?_=1396355365644 HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0"

            Aber wie kommt das? Und was dagegen tun?

            Liebe Grüße und vielen dank,
            WiMu

            1. Hi,

              Firefox sagt:

              GET http://localhost/test.php [HTTP/1.1 200 OK 80ms]
              irgendwelches Gedöhnse
              GET http://localhost/test.php [HTTP/1.1 200 OK 30ms]

              und der server sagt:

              127.0.0.1 - - [01/Apr/2014:14:29:25 +0200] "GET /test.php HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0"
              127.0.0.1 - - [01/Apr/2014:14:29:25 +0200] "GET /test.php?_=1396355365644 HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0"

              Das passt nicht ganz zusammen, ?_=1396355365644 solltest du eigentlich im Browser ebenfalls sehen beim zweiten Request.

              Aber egal, vermutlich irgendein Add-On, dass auf diese Weise sicherstellen will, dass die Ressource aktuell ist (und nicht aus dem Cache geladen wurde), oder sowas in der Art. Deaktiviere mal alle Extensions, und schau ob’ immer noch auftritt.

              Und damit weißt du jetzt auch, warum die Faustregel lautet, für Daten erzeugende/verändernde Requests immer die Methode POST zu verwenden :_)

              MfG ChrisB

              --
              Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
              1. Hi,

                Aber egal, vermutlich irgendein Add-On, dass auf diese Weise sicherstellen will, dass die Ressource aktuell ist (und nicht aus dem Cache geladen wurde), oder sowas in der Art. Deaktiviere mal alle Extensions, und schau ob’ immer noch auftritt.

                ja, das war's wohl - hab' mal den IE angeworfen, der quasi jungfräulich ist ... und der trägt nur einen Wert ein. Hm, doof, das.

                Und damit weißt du jetzt auch, warum die Faustregel lautet, für Daten erzeugende/verändernde Requests immer die Methode POST zu verwenden :_)

                Ja, klar, letztendlich wird das script per ajax/POST angestuppst werden, ich würde aber gerne sicher stellen, dass soetwas unter keinen Umständen passiert. Muss ich wohl ein UNIQUE über die eigentlich einzutragenden Werte legen, was mir gar nicht passt. Aber egal.

                Vielen Dank, hast mir sehr geholfen,
                WiMu