login  Naam:   Wachtwoord: 
Registreer je!
Scripts > PHP > Zoekmachines > Database zoeken


Reacties op het script Database zoeken

Offline  Richard
Gepost op: 20 juni 2006 - 10:18
Crew algemeen



Nou koen, kom maar op met je uitleg;-) Ik zie echt het nut er niet van in van wat hier gebeurt, array_shift kan echt gewoon worden gebruikt...

Offline  nemesiskoen
Gepost op: 20 juni 2006 - 13:08
Gouden medaille

PHP expert




Ik kan het heel lang en uitgebreid behandelen (maar dan loop ik de kans ergens tegen de lamp te lopen bij een stomme fout) of ik kan het zo zeggen:
omdat array_shift een array accepteert en mysql_fetch_row stuurt niet altijd een array terug. (hoewel php.net zegt van wel):

doe maar eens
  1. $query = mysql_query("SELECT a FROM b WHERE c = 3"); // als er geen een rij is waar c gelijk is aan 3)

mysql_fetch_row($query); stuurt in dit geval false terug.

En wat gebeurt er als je een boolean in array_shift pompt?
==>
Warning: array_shift() [function.array-shift]: The argument should be an array in ...

Snap je?

Dit zal overigens niet DE error zijn maar hij gaat al op z'n bek omdat hij een vaste boolean (die niet in een variabele zit) per referentie wil doorgeven.

Offline  Thomas
Gepost op: 20 juni 2006 - 14:10
Moderator



Mja, maar dat valt toch meer onder "error" handling van de query (controleer of de query syntactisch correct is (klopt de grammatica), controleer of de query semantisch correct is (controleer of er wel bestaande tabellen / kolommen worden opgevraagd en behandel de kolomtypen op de juiste wijze) en kijk of de query uberhaupt wel resultaten oplevert, anders zal elke fetch-query ook niets opleveren)?

Of zie ik dat verkeerd?

Offline  Maarten
Gepost op: 20 juni 2006 - 14:23
Erelid



Njah je moet er van uit gaan dat de functie gebruikt wordt door de ontwikkelaar, die hoort te weten of zijn tabel al dan niet bestaat. Indien er geen resultaten zijn voor de zoekopdracht krijg je gewoon een lege array terug, dus een simpele count over je output vertelt je dat gelijk.

Nogmaals, het is bedoeld voor implementatie door de ontwikkelaar en niet voor rechtstreekse input uit een formulier of iets dergelijks, indien je dat wenst kan je vooraf de attributen controleren vooraleer de functie te gebruiken.

Je kan ook altijd nog een or die(mysql_error()); achter de queries zetten mocht het niet gaan zoals het hoort, maar de hedendaagse ontwikkelaar hoort te weten hoe je fouten opspoort 

Offline  nemesiskoen
Gepost op: 20 juni 2006 - 14:48
Gouden medaille

PHP expert




@FangorN: helemaal gelijk. Maar dat neemt niets weg van het feit dat de code met array_shift op z'n bek gaat.
Natuurlijk gaat het met wel als je vooraf controleerd. (denk ik toch, ik weet niet precies hoe php omgaat met referenties van return waardes. Dat is nu ook niet echt propere code imo)

Waarom het ook niet zou werken is omdat vanaf php 5.0.5. deze STRICT error geboren is:
Strict Standards: Only variables should be passed by reference in ...

(deze error bestond al, maar dan alleen voor booleans, nu ook voor andere functiereturnwaardes)

Offline  Richard
Gepost op: 20 juni 2006 - 18:09
Crew algemeen



Aha je bedoelt het zo... Ik zal hier zeker geen opmerking over maken omdat je ook zeker gelijk hebt, maar, door mysql_fetch_row naar een array te casten kun je het met array_shift altijd nog doen;-):

  1. while($result[] = array_shift((array) mysql_fetch_row($q)));


of in ieder geval iets in die trant;-)

Offline  nemesiskoen
Gepost op: 21 juni 2006 - 23:01
Gouden medaille

PHP expert




Toch zal php dit niet leuk vinden:
Citaat:
Strict Standards: Only variables should be passed by reference in ...


Maar idd, als je E_STRICT afzet dan is het mogelijk om het te laten casten. Maar waarom moeilijk doen, een zwaardere functie gebruiken en met E_STRICT errors krijgen als het op een gemakkelijkere manier kan.

Offline  koekiemonste
Gepost op: 29 november 2006 - 11:02
Nieuw lid



Wellicht domme vraag, maar hoe krijg ik nu emerdere velden terug. Je hebt nu een id geselecteerd, maar als ik meerdere velden selecteer, dan klopt de array van geen kanten meer.


Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.04s