INSERT INTO wird doppelt ausgeführt

rennwolle17

Grünschnabel
Hallo,

vielleicht hat jemand von euch eine Idee, ich habe nun folgendes lustiges Ereignis - sobald ich ein INSERT INTO ausführe, wird dieses 2x in die Tabelle eingetragen. Ich hab mir da nun auch schon ein Testscript gebaut was ohne jeglichen Schnickschnack daher kommt.

Das ist die vereinfachte DB Klasse
PHP:
<?php
    class Database {

        /**
         * @param string $host,
         * @param string $username,
         * @param string $password,
         * @param string $database,
         * @param mixed $result
         */
        private    $sHost            = "",
                $sUsername        = "",
                $sPassword        = "",
                $sDatabase        = "",
                $mResult        = "";

        /**
         * @param object $pdo            -> static because otherwhise with each page load
         *                                     there will be multiple connections
         */
         private static $oPdo    = false;

        /**
         * @param string $host,
         * @return void
         */
        public function setHost( $sHost ) {
            $this->sHost        = $sHost;
        }

        /**
         * @param string $username,
         * @return void
         */
        public function setUsername( $sUsername ) {
            $this->sUsername    = $sUsername;
        }

        /**
         * @param string $password,
         * @return void
         */
        public function setPassword( $sPassword ) {
            $this->sPassword    = $sPassword;
        }

        /**
         * @param string $database,
         * @return void
         */
        public function setDatabase($sDatabase) {
            $this->sDatabase    = $sDatabase;
        }

        /**
         * @return void
         */
        public function getConnection() {

            if( !self::$oPdo ) {

                try {
                    self::$oPdo = new PDO('mysql:host='.$this->sHost.';dbname='.$this->sDatabase, $this->sUsername, $this->sPassword, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
                    self::$oPdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                }
                catch(PDOException $e) {
                    defined('CONFIG_DEBUG') && CONFIG_DEBUG == false
                        ? exit('Database connection failed.')
                        : exit('Database connection error: '.$e->getMessage().'.');
                }
            }
        }

        /**
         * @param string $qry,
         * @param array $args            -> can be empty when not using WHERE,
         * @return mixed $result/exception
         */
        public function query($sQry, $aArgs = array() ) {

            try {
                $this->mResult = $stmt = self::$oPdo->prepare($sQry);

                return $stmt->execute($aArgs);
            }
            catch(PDOException $e) {

                defined('CONFIG_DEBUG') && CONFIG_DEBUG == true
                    ? exit('Query failed: '.$e->getMessage().'.')
                    : exit('Query failed.');
            }
        }

        /**
         * @return mixed $rows
         */
        public function fetchAll() {
            return $this->mResult->fetchAll(PDO::FETCH_ASSOC);
        }

        /**
         * @return mixed $rows
         */
        public function fetch() {
            return $this->mResult->fetch(PDO::FETCH_ASSOC);
        }

        /**
         * @return int $rows
         */
        public function rowCountSelect() {
            return count($this->mResult);
        }

        public function rowCount() {
            return $this->mResult->rowCount();
        }

        public function lastinsertId() {
            return self::$oPdo->lastInsertId();
        }
    }

und das das Testscript das die Klasse verwendet

PHP:
<?php

    include("includes/classes/Database.class.php");

    ///////////////////////////////////
    // Datenbank Verbindung aufbauen
    $oDatabase = new Database();
    $oDatabase->setHost('localhost');
    $oDatabase->setUsername('user');
    $oDatabase->setPassword('pass');
    $oDatabase->setDatabase('database');

    $oDatabase->getConnection();

    $oDatabase->query("INSERT INTO co_taxonomy_terms (term_de_name, term_de_slug) VALUES ('Test 123', 'test-123')");

Das ganze habe ich auch schon mit einer anderen Datenbank Klasse getestet, da tritt genau das selbe Problem auf.
https://medoo.in/

Das einzige was ich mir vorstellen könnte, ist das irgend etwas falsch am DB Server konfiguriert ist - aber ich wüsste nicht was - da ich auch nichts geändert habe.

Neugestartet habe ich ihn schon.

Besten Dank und bei weiteren Fragen, fragen :)
 
Hi

untersuch als Erstes einmal, ob nicht evt. das ganze PHP-Script doppelt ausgeführt wird.
zB. sowas nur zum Testen am Dateianfang:
PHP:
file_put_contents(dirname(__FILE__) . "/bla.txt", "bla", FILE_APPEND);
Erstellt eine Datei bla.txt im selben Verzeichnis wie das PHP-Script, mit einem bla pro Aufruf drin.

Mit welchem Browser usw. wird das aufgerufen?
Hast du sowas wie wget (und/oder php in der Konsole) alternativ versucht?
 
Hi Sheel,

vielen Dank für Deine Hilfe. Ich hab gerade mal die bla.txt beschreiben lassen, es erfolgt in dieser nur ein Eintrag mit "bla", aber es landen dennoch zwei Einträge in der DB Tabelle.

wget habe ich mir soeben auf dem Mac ma installierst, da hat es mit dem Befehl "wget https://domain.tld/test.php" funktioniert, auch hier nur ein Eintrag in der "bla.txt" und auch nur eine INSERT Ausführung.

LG Chris
 
Ach so als Browser verwende ich Chrome, hab das ganze soeben mit Safari und Firefox getestet, da funktioniert es auch normal also nur ein Insert in der Tabelle, bei Chrome weiterhin zwei Einträge
 
Danke für die Hilfe und die Ideen, ein Kumpel hat mich auf den richtigen weg gebracht.

Chrome hat nach einem favicon gesucht, da dies nicht existiert hat er durch mod_rewrite das Hauptskript aufgerufen und in diesem befand sich aus lauter Verzweifelung der selbe Insert Befehl.
 

Neue Beiträge

Zurück