Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben
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.

Geschrieben

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 Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...