+ Antworten
Ergebnis 1 bis 3 von 3

Thema: [GELÖST] Fehler in SQL-Abfrage abfangen

  1. #1
    War schon öfter hier Avatar von Berndi
    Registriert seit
    20.02.2013
    Beiträge
    226
    Bedankte sich
    44
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard [GELÖST] Fehler in SQL-Abfrage abfangen

    Hallo Experten,

    ich möchte gerne wissen, wie ich eine fehlerhafte SQL-Abfrage umgehen kann.

    Folgendes Szenario:

    Ich frage beim Aufruf der Seite ein Kalendermodul ab.
    (In diesem Fall benutze ich JEvents, das sich mit einem Google-Kalender abgleicht)

    PHP-Code:
          $q1 $db->getQuery(true);
          
    $q1
            
    ->SELECT(array('b.detail_id''a.loc_id''a.location''c.title'))
            ->
    FROM($db->quoteName('##__jevents_vevdetail''a'))
            ->
    JOIN('INNER'$db->quoteName('##__jevents_vevent''b') . ' ON (' $db->quoteName('b.detail_id') . ' = ' $db->quoteName('a.evdet_id') . ')')
            ->
    JOIN('INNER'$db->quoteName('##__jev_locations''c') . ' ON (' $db->quoteName('c.loc_id') . ' = ' $db->quoteName('a.loc_id') . ')')
            ->
    WHERE($db->quoteName('b.icsid') . ' = ' $q0wert[0])
            ; 
    //

          
    $db->setQuery($q1);
          
    $q1wert $db->loadAssocList();

          if (
    $q1wert 0){
            for (
    $i 0$i count($q1wert); $i++){
              
    $dids[] = $q1wert[$i][detail_id];
              }
          
            
    $q2 $db->getQuery(true);
            
    $q2
              
    ->SELECT(array('a.startrepeat''a.endrepeat''a.eventdetail_id'))
              ->
    ORDER($db->quoteName('a.startrepeat'))
              ->
    FROM($db->quoteName('##__jevents_repetition''a'))
              ->
    JOIN('INNER'$db->quoteName('##__jevents_vevent''b') . ' ON (' $db->quoteName('b.detail_id') . ' = ' $db->quoteName('a.eventdetail_id') . ')')
              ->
    WHERE($db->quoteName('a.eventdetail_id') . ' IN (' .implode(',',$dids) . ')')
              ;    

            
    $db->setQuery($q2);
            
    $q2wert $db->loadAssocList();
            } 
    Wenn jedoch kein Kalendereintrag vorhanden ist, bekomme ich beim Aufruf der Seite logischerweise folgende Fehlermeldung:
    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY `a`.`startrepeat`' at line 4
    Wie bekomme ich es hin, dass die SQL-Abfrage übergangen wird, bzw. alternativer Code ausgeführt wird, wenn sie fehlerhaft ist?
    Gibt es so etwas wie eine "ON ERROR" Anweisung für SQL-Abfragen?

    Liebe Grüße,
    Berndi
    Geändert von Berndi (04.04.2018 um 18:18 Uhr)
    -----------------------------------------------------------------------------------
    Merke: Planung ist der Ersatz des Zufalls durch den Irrtum.

  2. #2
    Gehört zum Inventar
    Registriert seit
    06.03.2013
    Ort
    /dev/random
    Beiträge
    6.117
    Bedankte sich
    131
    Erhielt 2.280 Danksagungen
    in 2.149 Beiträgen

    Standard

    Mittels try catch block.
    Gruß FINWICK
    ↶ Danke Button nutzen, wenn es geholfen hat - Kein Suport via PN

  3. Erhielt Danksagungen von:


  4. #3
    War schon öfter hier Avatar von Berndi
    Registriert seit
    20.02.2013
    Beiträge
    226
    Bedankte sich
    44
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard

    Sehr geil.
    Vielen Dank!
    -----------------------------------------------------------------------------------
    Merke: Planung ist der Ersatz des Zufalls durch den Irrtum.

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein