Hängt davon ab, was Sie mit "sicher" und "sicher" meinen. Wenn "sicher" angenommen wird, werden die Variablen überprüft, ob sie gültig sind (dh definiert und gesetzt), dann ist sicher und getUsername()
nicht so sehr.
Die erste wird mit der Zeile if($query->num_rows()>0){
gesichert, in der Sie bestätigen, dass die Abfrage einige Zeilen zurückgegeben hat. Ein Vorschlag, betrachten Sie diese Struktur stattdessen.
if($query->num_rows()>0){
return $query->result();
}
else
{
return NULL;
//return $query->result(); would return an empty array which might be OK
//if you account for that possibility in the calling function.
//But if that's the case why the `if` statement?
//Skip the conditional and just return $query->result()
}
Oder statt eine if
diese Bedingung eleganter einen ternären Operator geschrieben werden kann.
return $query->num_rows()>0 ? $query->result() : NULL;
Ich möchte NULL aus Modellen zurückgeben, wenn die Abfrage keine Ergebnisse erzeugt. Der Rückgabewert wird in der aufrufenden Funktion geprüft wie so
$result = $this->model_name->getDetails($filename);
if(empty(result))
{
//handle the lack of data
}
else
{
//do stuff with $result
}
Die PHP-Funktion empty()
schön ist weil es die ganze berücksichtigen leer folgenden sein: NULL
, FALSE
, ein leeres Array, eine leere Zeichenfolge („“), 0
(0 als ganze Zahl), 0.0
(0 als Float), "0" (0 als String). Die meisten Basen sind dann abgedeckt.
getUsername($username)
ist weniger sicher, da möglicherweise keine Zeilen von der Abfrage zurückgegeben werden. Dies könnte zu einer nicht gesetzten Variablen in der Funktion führen, die die Rückgabe von dieser Funktion zuweist. Ohne Zeile wird die foreach
nicht ausgeführt und getUsername($username)
wird void zurückgeben. Das ist nicht unbedingt ein Problem, wenn Sie isset()
auf die Variable verwenden, die durch den Aufruf an getUsername($username)
zugewiesen wird.
Soweit "sicher" betroffen ist, sind Sie in guter Verfassung, weil die Verwendung where()
zB $this->db->where('username', $username);
automatisch den Eingabewert entkommt. Benutzereingaben sind immer ein Hauptanliegen und möglicher Angriff.
Die Verwendung der aktiven Record-Klassen ist der beste Weg, den Sie bereits machen. Ich bin mir nicht sicher, warum Sie das If/Else in Ihrer ersten Methode machen, weil sie beide das Gleiche zu tun scheinen. Auch im zweiten können Sie '-> limit (1)' then '$ query-> row()' machen, so dass Sie nur eine Zeile erhalten. Aber abgesehen von diesen kleinen Problemen sieht es gut aus. – mic