MySQL versus PHP

*Hieronder een rant waar ik al een tijdje mee zit*

Ik ben al een tijdje op zoek naar een manier om op een treffelijke wijze abstractie te maken van SQL in PHP. Kent er iemand daar een goeie klasse voor of zo? Ik ben nu zelf een rudimentaire klasse aan het ontwerpen, maar om eerlijk te zijn moet er beter spul bestaan. Ik zat te kijken in de richting van PEAR MDB2, maar daar moet je nog een aparte PHP module op serverniveau voor installeren.

Heb ik al gezegd dat ik de wijze waarop SQL en PHP door elkaar gemengd worden vre-se-lijk onhandig is? Noem het maar een revelatie die ik na al die jaren krijg, maar PHP dwingt je aan geen kanten abstractie te maken van de interfacing met je database backend. Het gevolg laat zich raden: onveilig geklooi met queries, variabelen, array’s en lussen. Ik heb al een aantal MYSQL/PHP applicaties ontworpen, en de valkuilen, ja zelfs de code in grote lijnen, blijven altijd hetzelfde. Het gevolg is dat je als ontwerper veel te hard moet blijven hangen bij de low-level stuff. In het slechtste geval ontwerp je een onveilige applicatie die met een simpele SQL injectie kan worden gehacked. En dan zwijg ik nog over de extra moeilijkheden als je met AJAX begint.

Zijn we niet 2007? Zouden we niet verder moeten staan? We zouden ons eindelijk eens moeten concentreren op wat écht belangrijk is: modulaire, herbruikbare code en bouwblokken waarmee we applicaties kunnen bouwen zonder steeds het warme water opnieuw te moeten uitvinden.

Mischien tijd om over te schakelen op Ruby on Rails? Of vertel ik nu helemaal niets nieuws?

7 replies

  • PDO? ADOdb?

    Ik heb even vlug door de documentatie van MDB2 gelezen en zie toch nergens dat je nog een extra module moet installeren?

    overigens: CakePHP moet zowat doorgaan voor de PHP-kloon van Rails…

  • Ik denk dat het tijd wordt dat je een framework gaat gebruiken. Zoals Dieter zei: CakePHP is de RoR voor PHP, net zoals Code Igniter en Symphony en een hoop andere projecten. Even zoeken op “rails php” en je zal snel op een lijst van die projecten stoten.

    Als je het liever allemaal zelf bedenkt: voor SQL injectie kan je iets toepassen zoals de PreparedStatements van Java. Daar gebruik je in de SQL query een vraagteken als placeholder die later – voor het uitvoeren van de query – wordt vervangen door een variabele. Op die variabelen pas je dan de correcte escape functie toe.

    Voor die andere toestanden: werk met klassen (object-georiënteerd), zorg voor samenhang en onafhankelijkheid binnen files/modules en als je de code eenmaal (goed genoeg) hebt geschreven kan je ze blijven gebruiken in al je projecten.

    Nog één ding: het feit dat PHP je geen echte abstractie aanbiedt voor je DB, bied je net vrijheid, zodat een simpel scriptje niet onnodig complex wordt. Ruby doet, voor zover mijn kennis reikt, het zelfde. Abstractie is nuttig, maar hoort thuis in een framework, niet in een taal.

  • Ik snap toch niet hoe bepaalde mensen blijven doorhameren op zogezegde “tekortkomingen” in php.

    Je kan PHP niet vergelijken met RoR; Rails is een framework met uiteraard een DB abstractie klasse in. Je zou dus moeten gaan vergelijken met ZF, CakePHP, CodeIgniter(aanrader!) enz

    Je SQL wordt evenzeer gemengd met je PHP als in bvb Ruby of Python. Het gaat er gewoon om hoe je het gebruikt.

    Verder sluit ik me volledig aan bij Kevin: verwacht van een taal dingen die eigenlijk niet bedoeld zijn.

  • Matthias

    27 januari 2007 at 11:43 pm

    Alvast bedankt voor de tips!

    De kracht van PHP is dat je inderdaad voor heel simpele zaken snel iets kan ontwikkelen zonder te moeten betrouwen op een volledig framework.

    Mijn eigen project is echter begonnen als een klein scriptje dat ondertussen bulkt van de functionaliteit en het overzicht en de efficiëntie al snel verloren gaat.

    Ik heb ondertussen inderdaad volledig de stap gemaakt naar object georiënteerd werken. Dat was op zich al een heel vooruitgang. Verder gebruik ik Smarty om de presentatie van de rest te scheiden wat ik ook al een boost was.

    Ik ga eens inderdaad moeten bekijken wat frameworks mij kunnen bieden…

  • Let op met Smarty en templating systemen in het algemeen. In 90% van de gevallen vind ik het overkill en gebruik je beter of

    Het kan enkel veel werk besparen als je samenwerkt met een webdesigner die helemaal geen verstand heeft van programmeren. Dan kan die zijn layout maken ahv {var} en bespaart het jou veel werk.

    Als eenvoudig en lichtgewicht framework kan ik zeker CodeIgniter aanraden.

  • Netsensei » Blog Archive » Lichtjes!

Commentaar is gesloten