13. februar 2013 - 00:38Der er
13 kommentarer og 1 løsning
PHP PDO funktion: Select where
Hej Eksperter.
Jeg har rodet lidt med en funktion(den er blevet lidt rodet måske):
public function whereselect($table,$where,$bind,$bindtwo,$type,$array = array(), $fetchMode = PDO::FETCH_ASSOC) { $sth = $this->prepare("SELECT * FROM $table WHERE $where"); $sth->bindValue($bind, $bindtwo, $type);
Det giver ikke mening at bruge et prepared statement, når man strikker det sammen af udefrakommende data.
Det er sjældent en god idé at lave den slags 'jeg-kan-det-hele' funktioner i et databaselag. Lav i stedet en funktion for hver ting, du skal kunne - f.eks. listUserProps($user_id).
Du kan til nød have et array med færdige SQL-strenge, som du inde i funktionen kan vælge mellem på basis af en eller flere medsendte argumenter.
function whereselect($command) { $sqls = array( 'foo' => 'SELECT * FROM table_1 WHERE id = ?', 'bar' => 'SELECT * FROM table_2 WHERE id = ?', 'baz' => 'SELECT * FROM table_1 WHERE user_name = ?' );
if ($sql = $sqls[$command]) { $sth = $this->prepare($sql); } else { // Something nasty hit the fan! }
... ... ... ... ... ... }
- og da der er tale om en metode i en klasse, kunne $sqls jo ligge som en privat property
Men kan du forklare mig, hvad problemet helt præcist er ved at have en klasse, der hedder database, hvori der er disse 'jeg-kan-det-hele' funktioner. Disse funktioner bliver kaldt i en modelklasse, hvori der er metoder, der behandler dataene mellem disse 'jeg-kan-det-hele- funktioner og frontend?
Ja, det er bare en klump skidt afviklende kode, som er overflødig og giver dårligere styr på, hvad der egentlig sker i applikationen.
Hvad godt mener du, de gør for dig? Ville det ikke netop være logisk at kalde funktionen listUserProps fra dit view - eller getUserProps fra din controller - hvis du taler MVC?
Altså for hver url loades en controller, der bestemmer hvilken model og hvilket view, der skal være.
Jeg har så et fast bibliotek, hvori der er en database klasse med database funktioner som select, delete, update osv. Dem du kalder "Kan det hele funktioner".
Det er i model at jeg bruger denne klasse database til sql og database for at spare programmering.
Jeg er ikke sikker på, vi har samme opfattelse af MVC, men lad det nu ligge =)
Generiske funktioner i databaselaget er noget rod - og som sagt bare et unødigt led. Den konstruktion, du viser, bygger på, at alle felter altid skal hentes. Brug af '*' bruges som regel i eksempler og tutorials, men undgås så vidt muligt i real-life kode.
Lav de funktioner/metoder, du reelt har brug for. Det giver bedre kode og er sikrere
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.