murat1895 Geschrieben 14. September 2016 Geschrieben 14. September 2016 Guten Tag zusammen, ich habe ein sehr merkwürdiges Phänomen wo ich gerade nicht weiter komme. Ich habe folgende SQL-Abfrage: select * from Bedarfsmeldung inner join View_Mitarbeiter on Bedarfsmeldung.Personalnummer = View_Mitarbeiter.Personalnummer left join Kostenstelle_Mitarbeiter on Kostenstelle_Mitarbeiter.Personalnummer = View_Mitarbeiter.Personalnummer where Bedarfsmeldung.Personalnummer = 999999 or Kostenstelle_Mitarbeiter.Personalnummer = 999999 Diese Abfrage funktioniert direkt in der MS SQL Management Console einwandfrei und liefert die erwarteten Ergebnisse. Führe ich den folgenden PHP-Teil aus, wird mir allerdings ein leeres Array zurückgegeben. Ich habe das SQL-Statement zum Testen ein wenig umgebaut, daher können die Parameter im Array (fertig, inBearbeitung und personalnummer ignoriert werden). Wenn das or Kostenstelle_Mitarbeiter.Personalnummer = 999999 entferne, bekomme ich ein Ergebnis, jedoch nicht das, welches ich benötige. public function getPersoenlicheBestellungen($fertig = '0', $in_bearbeitung= '0', $sortierart="desc", $sortierspalte='id'){ $personalnummer = $this->ldap->getPersonalnummer(); $res = ($this->db->select("select * from Bedarfsmeldung inner join View_Mitarbeiter on Bedarfsmeldung.Personalnummer = View_Mitarbeiter.Personalnummer left join Kostenstelle_Mitarbeiter on Kostenstelle_Mitarbeiter.Personalnummer = View_Mitarbeiter.Personalnummer where Bedarfsmeldung.Personalnummer = 999999 or Kostenstelle_Mitarbeiter.Personalnummer = 999999", array(':fertig'=>$fertig, ':in_bearbeitung'=>$in_bearbeitung, ':personalnummer' =>$personalnummer) )); return $res; } Hier nochmal die Funktion select.... public function select($sql, $array = array(),$fetch='fetchAll', $fetchMode = PDO::FETCH_ASSOC){ $stmt = $this->prepare($sql); if($array!=""){ foreach ($array as $key =>$value){ $stmt ->bindValue("$key", $value); } } $stmt ->execute(); // print_r($stmt); $res = $stmt->$fetch($fetchMode); // print_r($res); return $res; // print_r($stmt); } Vielleicht habt ihr ja eine Idee, woran es liegen könnte. Zitieren
thereisnospace Geschrieben 14. September 2016 Geschrieben 14. September 2016 OR ist die schwächste Verbindung und wird zuletzt ausgewertet. Setze dein WHERE Statement in Klammern und probier es nochmal. Zitieren
murat1895 Geschrieben 14. September 2016 Autor Geschrieben 14. September 2016 vor 9 Minuten schrieb Gottlike: OR ist die schwächste Verbindung und wird zuletzt ausgewertet. Setze dein WHERE Statement in Klammern und probier es nochmal. Ich habe es versucht aber bringt nichts. Aber die Abfrage an sich Funktioniert ja schon, halt direkt auf der DB, nur hier wird mir ein leeres Array zurückgegeben. Zitieren
Whiz-zarD Geschrieben 14. September 2016 Geschrieben 14. September 2016 Hast du auf dem Server alle Fehlermeldungen aktiviert? Vielleicht tritt dort ein Fehler auf und du siehst es nur nicht. Aber noch ein Hinweis: Vermeide SELECT *, denn das gibt zu viele Informationen zurück und kann auch zu Problemen führen, wenn man weitere Tabellen gejoint hat, die wiederum Spalten besitzen, die den selben Namen haben. Gib immer explizit an, welche Spalten du haben willst. In diesem Fall hast du sogar zwei Tabellen gejoint, also gibt dir die Abfrage die Spalten von drei Tabellen zurück. Je nach Anzahl der Recordsets kann es durchaus zu Performanceproblemen kommen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.