Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlermeldung nach SQL-Query - Suche in falscher Spalte?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehlermeldung nach SQL-Query - Suche in falscher Spalte?

    Hallo zusammen,

    ich glaube, ich stehe mächtig auf dem Schlauch.

    Ich finde den Fehler nicht.

    Ich habe in meiner GetItem()-Methode in meinem Model einen Zugriff auf eine Datenbank.

    So sieht dieser Zugriff aus:


    PHP-Code:
    if(!empty($item->mailid))
                    {
                        
    // Get the messages 
                        
    $db    $this->getDbo();
                        
    $query  $db->getQuery(true);
                        
    $query->select('*');
                        
    $query->from('#__bestia_mails_messages'); 
                        
    $query->where('mailid = '.$item->mailid);  

                        
                        
    $db->setQuery($query);
                        if (
    $db->getErrorNum()) 
                        {
                            echo 
    $db->getErrorMsg();
                            exit;
                        }
                        
    $item->mails $db->loadObjectList();
                        
                    } 
    Der Fehler, der erscheint, lautet wie folgt:

    Unknown column 'N11680' in 'where clause' SQL=SELECT * FROM a0c8u_bestia_mails_messages WHERE mailid = N11680-1
    Ich verstehe nicht ganz, warum der Fehler erscheint. Die Spalte "N11680" soll doch auch garnicht durchsucht werden, sondern die Spalte "mailid".


    Bin für jede Hilfe dankbar


  • #2
    N11680 ist aber nunmal für MySQL ein Spaltenname und kein String. Schonmal was von Quoting gehört?
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Hallo tkausl,

      okay - vielen Dank. Wie kommt es, dass MySQL den eigentlichen Suchwert nicht als Suchwert verwendet?

      Ich habe mittlerweile diverse verschiedene SQL-Queries, in denen nach Namen, Nummern u.ä. gesucht wird. Bei keiner dieser Queries ist dieser Fehler aufgetreten.

      Müsste es dann so heißen:

      PHP-Code:
      $query->where('mailid = \''.$item->mailid.'\''); 
      ?

      Kommentar


      • #4
        Zitat von SPQR Inc. Beitrag anzeigen
        Wie kommt es, dass MySQL den eigentlichen Suchwert nicht als Suchwert verwendet?
        Warum fährt das Auto nicht vorwärts wenn ich den Rückwärtsgang drin habe?
        Du willst nach einer Zeichenkette suchen? Dann solltest du der Datenbank nicht sagen sie soll zwei Spalten vergleichen...

        Zitat von SPQR Inc. Beitrag anzeigen
        Ich habe mittlerweile diverse verschiedene SQL-Queries, in denen nach Namen, Nummern u.ä. gesucht wird. Bei keiner dieser Queries ist dieser Fehler aufgetreten.
        Nicht richtig getestet. Zahlen können ohne Quotes angegeben werden, Zeichenketten müssen gequotet werden.

        Zitat von SPQR Inc. Beitrag anzeigen
        PHP-Code:
        $query->where('mailid = \''.$item->mailid.'\''); 
        Zeichenkette müssen escapt oder gefiltert werden, ansonsten sind SQL Injections möglich.

        Kommentar


        • #5
          Ah, besten Dank

          Die Intention war, die Werte eines Eintrages zu bekommen, in dem der Wert "mailid" einen bestimmten Wert (String) aufweist.

          Für die Joomla-Programmierer: Joomla bietet hier $db->quote und $db->escape:

          PHP-Code:
          $query->where('mailid = '$db->quote($db->escape$item->mailid)), false); 

          Wenn ich http://docs.joomla.org/Secure_coding_guidelines richtig verstanden habe, würde es aber auch reichen, $db->quote($item->mailid) zu verwenden?

          Kommentar


          • #6
            Ja, qoute escapt automatisch den Wert. (da muss das false natürlich weg)

            Kommentar

            Lädt...
            X