Likes Likes:  0
Resultaten 1 tot 2 van de 2
Geen
  1. #1
    PHP en Database fout
    Gratis Hosting
    356 Berichten
    Ingeschreven
    17/11/03

    Locatie
    Munstergeleen

    Post Thanks / Like
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    0 Berichten zijn liked


    Registrar SIDN: nee
    KvK nummer: nvt
    Ondernemingsnummer: nvt

    Thread Starter

    PHP en Database fout

    Goed, mijn probleem. Ik ben sinds een tijdje bezig met een eigen CMS (zoiets als PHPNuke maar dan beter of course) te maken. Daarbij heb ik ook mijn eigen MySQL driver geschreven. Klinkt groter dan het is, het is er voor gemaakt omdat ik compatibiliteit wil waarborgen voor database types. Meeste scripts zijn nu nog gebaseerd op MySQL omdat 96% dit gebruikt, maar PostgreSQL is in opmars en dus wil ik niet het risico lopen over een paar jaar m'n hele script om te hoeven gooien. De driver zorgt er gewoon voor dat de query's (dit moet dus WEL op basis van de SQL taal zijn, anders kan het niet. De queries kun je niet zomaar ff veranderen) door de goede functies gehaald worden en de data ook op een goede manier weer worden teruggegeven. Aan de hand van de gebruike database zoek je de driver erbij.

    Goed, inleidend stukje daarover is klaar. Wat doet zich voor? Met de MySQL driver kun je dingen uitvoeren in de database. De SQL driver is een class die functies bevat voor het uitvoeren van queries. Bijv. de functie dbquery:
    PHP Code:
    <?php 
    [...] 
            function 
    dbquery($query$do_fetch 1$linenumber 0$file _DB_QUERY_FILE_NA)   
            { 
                if(!isset(
    $query)) 
                    die(
    $this->dbFatalError(_DB_QUERY_NO_QUERY''$linenumber$file)); 
                      
                
    $the_query = @mysql_query($query
                                or die(
    $this->dbFatalError(_DB_QUERY_FAILED$query$linenumber$file)); 
                if(
    $do_fetch == 1
                { 
                    
    $result = @mysql_fetch_row($the_query
                                or die(
    $this->dbFatalError(_DB_QUERY_FETCH_FAILED$query$linenumber$file)); 
                } 
                else   
                { 
                    
    $result $the_query
                } 
                return 
    $result
            }                  
    ?> 
    [...]
    Wat deze functie nou in feite doet is gewoon de query aannemen, hem onderzoeken (leeg? ongeldig?), uitvoeren (mysql_query()) en als dat aangegeven is ook nog fetchen met mysql_fetch_row(). Daarna natuurlijk teruggeven.
    Dit werkt prima in een vb als dit:
    PHP Code:
    <?php 
    [..] 
    $moduleQueryResult $API->database->dbquery($moduleQuery0__LINE____FILE__); 
    [..] 
    ?>
    (Let vooral niet op $API of de popi benamingen, het gaat om de functie dbquery())

    De resultaten (indien argument 2 "true" is) worden netjes geladen in $moduleQueryResult. Maar als ik dit nu wil gaan gebruiken in een loop voor database resultaten (while()) krijg ik problemen:
    PHP Code:
    <?php 
    [...] 
    while(
    $moduleQueryResult $API->database->dbFetchQuery($moduleQuery__LINE____FILE__)) 


    [...] 
    ?>
    Dit geeft niet het gewenste resultaat. Tot mijn stomme verbazing zie ik nu echter wel (zat wat pauze tussen het voorbeeld en deze paar zinnen ) dat de while wordt uitgevoerd en de dingen ook worden ge-echo'ed maar daarna krijg ik toch nog een database fout dat de query niet gefetched kon worden. Ikzelf heb zo'n vermoeden dat dit komt omdat de while loop 1 keer meer draait dan dat er resultaten zijn. De laatste is er echter niet dus resulteerd dat in een fout.
    Dit is het script wat ik gebruikt heb:

    PHP Code:
    <?php 
    [..] 
    include_once(
    "../source/api.php"); 
    $API = new API
    $query $API->database->dbquery("SELECT * FROM atl_mainsettings"0); 
    while(
    $queryfetched $API->database->dbFetchQuery($query__LINE____FILE__)) 

      echo 
    $queryfetched[0]." => ".$queryfetched[1]."<br />\n"

    [..] 
    ?>
    En dit is de uitkomst ervan (De DB driver heeft inderdaad een eigen error report systeem ingebouwd )
    PHP Code:
    curr_language => nld 
    acp_mods_row 
    => 
    logo_url 
    => <a href="http://www.jongerenweb.com/admin/style/images/logo.png" target="_blank">[url]http://www.jongerenweb.com/admin/style/images/logo.png[/url]</a> 
    logo_align => center 
    stats_level 
    => 
    locale 
    => nl_NL 
    site_address 
    => <a href="http://www.jongerenweb.com/" target="_blank">[url]http://www.jongerenweb.com/[/url]</a> 
    Ernstige fout opgetreden tijdens database operaties...
    Gedetailleerde informatie over de foutmelding

    SQL Foutnummer: 0
    Gedetailleerde foutmelding:
    De query die verkeerd ging:
    Overige informatie:
    _DB_ERROR_MSG: Er is (zijn) fout(en) opgetreden tijdens het ophalen van de resultaten van de query. Meer details volgen.
    Line number where it went wrong: 6
    File in where it went wrong: d:\phpdev\www\atlantis\admin\tryout.php

    Lijn 6 correspondeert met de lijn van de while loop...

    Mijn vraag is dus nu ook: hoe los ik dit op. Wat ik wil moge duidelijk zijn: de laatste lus van de while() moet niet gedaan worden wanneer deze niets bevat/niet bestaat. Dit schijnt hij nu wel te doen, aangezien hij de while loop keurig netjes uitvoerd alleen toch een error geeft na afloop..



  2. #2
    PHP en Database fout
    Webhoster
    73 Berichten
    Ingeschreven
    17/10/03

    Locatie
    Almere, NL

    Post Thanks / Like
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    0 Berichten zijn liked


    Registrar SIDN: ja
    KvK nummer: 39077039
    Ondernemingsnummer: nvt

    Kun je in jouw geval niet beter vooraf tellen (met count of iets anders) hoeveel keer de while loop uitgevoerd met worden. Als dat lukt, kun je deze m.i. vervangen door een for loop...

    Een andere optie zou zijn onderaan je while loop een controle doen of deze nogmaals uitgevoerd moet worden, is dat niet het geval, zorg je dat de loop exit.

Webhostingtalk.nl

Contact

  • Rokin 113-115
  • 1012 KP, Amsterdam
  • Nederland
  • Contact
© Copyright 2001-2021 Webhostingtalk.nl.
Web Statistics