PHP & MYSQL Fehlerhaftes Ergebnis (Fremdschlüssel)


#1
Hallo zusammen,

ich habe folgendes Problem. Ich frage über PHP ab ob ein Datensatz in der Datenbank leer ist, wenn ja (true) dann soll er mir das mitteilen und ich handel dann entsprechend im PHP-Script. An sich funktioniert das ganze auch. Aber sobald ich ein Fremdschlüssel zu dieser Datenbanktabelle erstelle/hinzufüge, geht mein PHP-Script immer ins nein (false). Egal ob der Datensatz vorhanden ist oder nicht. Ist mein PHP-Script falsch? Wenn nein, warum geht er dann immer ins Nein?

Ich bedanke mich schon mal im Voraus für eure Mühen :)

PHP:
$sql = "SELECT BEFEHL....";

$result = mysqli_query($dbConfig->connect, $sql);


if(mysqli_num_rows($result)==0){
    return true;
}else{
    return false;
}
 
#4
Also, die Methode $dbConfig ist für die mysqli_ funktion ein wichtiger bzw. zwingender Parameter geworden. Es überprüft damit, ob die Datenbankverbindung aufgebaut ist oder nicht. Nichts anderes ist in der Variable $dbConfig->connect enthalten. Mir fällt es relativ schwer das noch genau zu erklären, weil das ganze konstrukt ja funktioniert, nur nicht wenn ich in der Datenbank (phpmyadmin) eine Spalte mit einer anderen Spalte verknüpfe.
 
#5
Probiere doch mal die if abfrage zu verändern:
PHP:
if(empty(mysqli_num_rows($result)) AND mysqli_num_rows($result) ==0){
    return true;
}else{
    return false;
}
Poste doch bitte mal ein bild von deiner Datenbanktabellenstruktur dann fällt es uns einfacher dir zu helfen:)
 
#6
Ich hoffe das man dass jetzt besser versteht

Datenbank.png

PHP:
///////////////////////////////////////1te Methode (ohne Fremdschlüssel in der Datenbank) ////////////////////////
$sql = "SELECT
                    *
                FROM
                    `datenbanknamen_places`
                WHERE
                    `postcode` = '12345'
                AND
                    `place` = 'Teststadt'";
      
        $result = mysqli_query($this->dbConfig, $sql);

        if(mysqli_num_rows($result)==0){

            return true;
        }else{
            // Logischerweise geht er hier rein weil die bedingung stimmt (er hat ja was gefunden, was auch in dem Fall richtig ist)
            return false;
        }
    }


/////////////////////////////////////////2te Möglichkeit (ohne Fremdschlüssel in der Datenbank)/////////////////////////////////////

$sql = "SELECT
                    *
                FROM
                    `datenbanknamen_places`
                WHERE
                    `postcode` = '43123'
                AND
                    `place` = 'Teststadt2'";
      
        $result = mysqli_query($this->dbConfig, $sql);

        if(mysqli_num_rows($result)==0){
            // Hier geht er richtigerweise rein, weil er ja ein leeres Resultat erhalten hat.
            return true;
        }else{
            
            return false;
        }
    }
PHP:
///////////////////////////////////////1te Methode (mit Fremdschlüssel in der Datenbank) ////////////////////////
$sql = "SELECT
                    *
                FROM
                    `datenbanknamen_places`
                WHERE
                    `postcode` = '12345'
                AND
                    `place` = 'Teststadt'";
      
        $result = mysqli_query($this->dbConfig, $sql);

        if(mysqli_num_rows($result)==0){

            return true;
        }else{
            // Logischerweise geht er hier rein weil die bedingung stimmt (er hat ja was gefunden, was auch in dem Fall richtig ist)
            return false;
        }
    }


/////////////////////////////////////////2te Möglichkeit (mit Fremdschlüssel in der Datenbank)/////////////////////////////////////

$sql = "SELECT
                    *
                FROM
                    `datenbanknamen_places`
                WHERE
                    `postcode` = '43123'
                AND
                    `place` = 'Teststadt2'";
      
        $result = mysqli_query($this->dbConfig, $sql);

        if(mysqli_num_rows($result)==0){

            return true;
        }else{
            // Er geht hier rein, obwohl die Datenbank ein leeres Resultat erhalten hat.
            return false;
        }
    }
 

basti1012

Erfahrenes Mitglied
#7
auch interesant. Was passiert den wenn du es so versuchst
Code:
 if(mysqli_num_rows($result)<1){
            return true;
        }else{
            return false;
        }
    }
Was gibt dir den vardump zurück
 

EuroCent

Erfahrenes Mitglied
#8
Arbeite bitte nicht mit var_dump(); sondern slieber mit dem:

PHP:
<?php
$hilfe = mysqli_num_rows($result);
printf('<pre>%s</pre>', print_r($hilfe, true));
?>
Und dann schauen ob du überhaupt einen Wert erhältst. :)
 
#9
Hallo zusammen,

es funktioniert endlich (am PHP-Skript wurde nichts geändert). Ich habe ein bisschen an der Datenbank herumgespielt. Ich bedanke mich bei allen herzlich.
 

Neue Beiträge