Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.