Datenbankabfrage funktioniert nicht richtig

  • ProfPe ProfPe
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2012, 12:49

    Hallo Gemeinde.

    Ich schreibe grad an einer Extension in der ich Datenbankabfragen nutzen müsste.

    Ich möchte eine Abfrage wie diese nutzen:

    1. $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    2. 'tx_extName_files.filename',
    3. 'tx_extName_files',
    4. 'tx_extName_files.filename = \'Brochure.pdf\'',
    5. '',
    6. '',
    7. ''
    8. );
    9. if ($GLOBALS['TYPO3_DB']->sql_num_rows($result)) {
    10. while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)){
    11. echo "...";
    12. }
    13. } else {
    14. echo "???";
    15. }

    Diese liefert aber keine Ergebnisse (Es wird das ??? ausgegeben.
    Wennich mir per:
    1. $result = $GLOBALS['TYPO3_DB']->SELECTquery(
    2. 'tx_extName_files.filename',
    3. 'tx_extName_files',
    4. 'tx_extName_files.filename = \'Brochure.pdf\'',
    5. '',
    6. '',
    7. ''
    8. );
    9. t3lib_div::debug($result)

    die erzeugte Abfrage ansehe kommt dabei dies heraus:
    1. SELECT tx_extName_files.filename FROM tx_extName_files WHERE tx_extName_files.filename = 'Brochure.pdf'

    Diese Abfrage funktioniert auch in der Datenbank, spricht gibt ein Ergebnis zurück.
    Änder ich den Code auf:

    1. $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    2. 'tx_extName_files.filename',
    3. 'tx_extName_files'
    4. );

    funktioniert es.

    Komme dabei einfach nicht weiter.

    -> Typo3 4.5

    Hat jemand eine Idee woran das Verhalten liegen könnte?


  • 1
  • SomehowLost SomehowLo...
    Jedi-Meister
    0 x
    278 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2012, 14:36

    Hallo,

    ändere mal

    1. if ($GLOBALS['TYPO3_DB']->sql_num_rows($result)) { }

    zu
    1. if ($GLOBALS['TYPO3_DB']->sql_num_rows($result) > 0) { }

    Vielleicht liegts daran, dass die Ausagbe bei $GLOBALS['TYPO3_DB']->sql_num_rows($result) grundsätzlich einen Integer-Wert und nicht Boolean (true/false) zurückgibt.

    Viele Grüße

    [url=http://www.andreas-hoffmeyer.de/]Andreas Hoffmeyer - Websites & mehr...[/url]
    [url=http://typo3-4-newbies.blogspot.de/]TYPO3 für Einsteiger: typo3-4-newbies.blogspot.de[/url]

  • ProfPe ProfPe
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2012, 14:50

    @SomehowLost.

    Habe ich mal probiert. War aber leider zu erwarten dass das keinen Unterschied macht, da die Ausgabe ja funktioniert wenn ich nur Spalten und Tabelle in der Abfrage angebe.

    Also:

    1. $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    2. 'tx_extName_files.filename',
    3. 'tx_extName_files'
    4. );

    funktioniert.

    1. $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    2. 'tx_extName_files.filename',
    3. 'tx_extName_files',
    4. '',
    5. '',
    6. '',
    7. ''
    8. );

    funktioniert nicht. Ob ich bei dem where nun was Eintrage oder nicht. Es funktioniert nicht.

  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    30. 07. 2012, 16:33

    Hallo ProfPe,

    1. $fileName = 'Brochure.pdf';
    2.  
    3. $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
    4. 'tx_extName_files.filename',
    5. 'tx_extName_files',
    6. 'tx_extName_files.filename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($fileName, 'tx_extName_files')
    7. );

    VG,
    LuP

  • ProfPe ProfPe
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    31. 07. 2012, 08:31

    Hallo LuP.

    Du hast auf jeden Fall schon mal einen Fehler gefunden.
    Ich habe bei meiner vorherigen Variante

    1. $GLOBALS['TYPO3_DB']->sql_num_rows($result)

    ausgeben wollen und es gab nicht mal '0'.

    Nach deiner Varainte bekomme ich allerdings nur '0', Nachdem ich noch mal kontrolliert hatte dass der Suchstring richtig ist kam mir das etwas komisch vor.
    Über

    1. t3lib_div::debug($result);

    bekomme ich dann ausgegeben:
    1. SELECT * FROM tx_extName_files WHERE tx_extName_files.filename=''

    Irgendwas läuft da bei

    1. 'tx_extName_files.filename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($fileName, 'tx_extName_files')

    schief. Was liest die Funktion denn aus der Tabelle die für die Quotierung zur Hilfe zieht?

    Und gibt es keine Varainte dass man sich den SQL-String selber lötet und dann an $GLOBALS['TYPO3_DB'] übergibt. Das jetzt sind meien ersten Versuche eine Extension an die Datenbank anzuschliessen. Ich plane relativ komplexe, dynamisch erzeugte Abfragen. Und die dann jedes mal so zu stricken macht es mir nicht einfacher. Vieleicht ist es ja nur Übungssache, aber SQL geht mir leichter von der Hand.

  • ProfPe ProfPe
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    31. 07. 2012, 09:37

    Ah jetzt funktioniert es. Auch wenn ich nicht herausgefunden habe wo der Fehler lag.
    HAb ein bischen herum getestet und dann deinen quelltext, LuP, noch mal kopiert und es läuft. Evtl. einfach n Copy&Paste Fehler. Auch wenn man Copy&Paste versucht zu verhindern macht man es ab und an doch noch ;)

    Danke LuP
    Dritte mal hier eine Anfrage gestellt und das dritte mal hast du die Lösung "thumbsup*

    Jetzt mal überlegen wie ich komplexere Gebilde bei den Abfragen hin bekomme :)

    Vieleicht wird exec_SELECTquery ja noch mein Freund

    [EDIT:]
    Mhhh also ansich funktioniert es. Aber

    1. $GLOBALS['TYPO3_DB']->fullQuoteStr($fileName, 'tx_extTable_files')

    funktioniert nur wenn ich es zwei mal aufrufe.
    Als Besipiel:

    1. "|QUOTE|".$GLOBALS['TYPO3_DB']->fullQuoteStr($fileName, 'tx_extTable_files')."|QUOTE|";

    liefert
    1. |QUOTE|''|QUOTE|

    Aber

    1. "|QUOTE|".$GLOBALS['TYPO3_DB']->fullQuoteStr($fileName, 'tx_extTable_files')."|QUOTE|";
    2. "|QUOTE|".$GLOBALS['TYPO3_DB']->fullQuoteStr($fileName, 'tx_extTable_files')."|QUOTE|";

    liefert
    1. |QUOTE|''|QUOTE||QUOTE|'Brochure.pdf'|QUOTE|

    Verwirrend

  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2012, 15:28

    Hallo ProfPe,

    Bitte, gern geschehen.

    Wenn Du die verwendeten Syntaxen nachschlagen willst, kann Du dies in der [url="http://typo3.org/api/typo3/classt3lib___d_b.html"]TYPO3-API[/url] tun.

    VG.
    LuP

  • 1