Ris/ros til egen udviklet mysql class/lib

Tags:    php

Hej alle,

jeg har nu arbejdet på en MySQL(i) klasse, der skal gøre det nemmere at sikre sine websider mod cross-site scripting og sql injections, så jeg vil gerne høre jeres mening. Indtil videre omfatter den kun Mysql men vil også komme til at omfatte MySQLi når jeg har fået mysql helt på plads.

interface.mysql.php
Fold kodeboks ind/udPHP kode 


class.mysql.php
Fold kodeboks ind/udPHP kode 


mysql.php
Fold kodeboks ind/udPHP kode 


Brugen af lib/classes:
Man opretter et object af klassen mysql og klassen mysql sørger så for at oprette et object til Mysql klassen eller Mysqli klassen.

Eks på query:
$mysql = MySQL::setInfo("host","user","pass","data");
$result = $mysql->query("INSERT INTO test(test1, test2) VALUES('{0}','{0}')", array('Hej','Hej2', false);

Har I spørgsmål så spørg endelig. Licens: Non-Commercial :)

Mvh Martin




Indlæg senest redigeret d. 27.09.2008 15:22 af Bruger #6559
Som jeg skrev, den gang da du begyndte:
interfaces beskriver den generelle struktur...

Med din kode for man denne struktur:
Fold kodeboks ind/udKode 


Bedre struktur er:
Fold kodeboks ind/udKode 



Dertil er din factory class også lidt mærkelig, men den kan gå an. Men ville nok omskrive den til at kunne supportere flg.:
Fold kodeboks ind/udKode 


Tilslut, der er ingen grund til at lade databaseforbindelsen om at styre kontrollen af HTML eller ej. Det vil i stort set alle tilfælde være noget som håndteres et andet sted.



Det med interface er selvfølgelig logisk nok når du siger det (det var nemlig meningen til en generelt brug), jeg ved ikke lige hvad jeg har tænkt da jeg så gav den navnet (Hvis jeg tænkte).

Ja factory klassen er lidt underlig. Jeg ville egentlig bare have haft en klasse med kun en konstruktør, men jeg kunne bare ikke få den til at returnere det object, men det er noget der skal arbejdes på.

Det med min factory class kan jeg godt følge dig i, men er lidt i tvivl om hvordan jeg skal implementere det, men jeg går ud fra det kunne gøres sådan:

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 27.09.2008 15:52 af Bruger #6559
du mangler da foldsvis mange ting.

du kan jo se php implementeringen af mysql, blandt de vigtigste af dem du mangler er nok
mysql_insert_id
mysql_error
mysql_errno


Et forslag som jeg selv bruger er at i stedet for at returnere resultatet så returner en iterator klasse med resultatet:

så man kan skrive f.eks
$results=$mysql->query();
foreach($results as $row){
}


Et andet forslag er at fjerne strippe argumentet fra dit query, hvis du insistere på at have det kan du bare lave en member variable, grunden til dette er at du så ikke behøver at lave et array med input men i stedet kan iterer over de sendte argumenter.


Et tredje forslag er at lave gøre så interfacet har alle functionerne, så klasser der implementer interfaset kun skal implementer dem, men tilgengæld også ved at de kun kan blive tilgået gennem function defineret i interfacet.

f.eks har du fetchRow men den er ikke i interfacet så hvis du skiftede klassen ud med en anden klasse hvor den hed getRow skulle du til at om kode alle steder du havde skrevet fetchRow.





Jeg ved skam godt jeg manger nogle ting endnu, men jeg synes også det er rart at få lidt kritik undervejs så jeg ikke står bagefter og skal ændre en hel masse. :)



Fold kodeboks ind/udPHP kode 


Dette ligner en smule det setup jeg bruger i mit eget library. Det sparer dig for et par ting.
Og hvis man så skriver en passende sql statement handler, så kan man lave queries vha. metode navne frem for at skulle skrive hele SQLen selv. Det har den fordel at man ikke skal ud og omskrive en masse sql, hvis man en dag flytter database.



Indlæg senest redigeret d. 27.09.2008 16:12 af Bruger #10216
Vil det ikke så være en fordel at lave klassen Database_Adapter_Abstract til en abstract klasse? Kan godt se at det letter den del hvor man opretter forbindelsen.



Jo da... det gik lidt stærkt da jeg skrev det. :)



Jeg kan se jeg stadigvæk har brug for en masse erfaring :) Men det er bare om at klø på. Jeg siger tak.

Jeg er stadigvæk interesseret i at høre fra andre.



Jeg kørt lidt videre på dit kodeeksempel, men så har jeg lidt mere kontrol.

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 27.09.2008 17:05 af Bruger #6559
t