Veröffentlicht 14. September 20168 j 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.
14. September 20168 j OR ist die schwächste Verbindung und wird zuletzt ausgewertet. Setze dein WHERE Statement in Klammern und probier es nochmal.
14. September 20168 j Autor 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.
14. September 20168 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.