functionsfehler

Kann mir einer helfen?



PHP:
function user_info($user, $field)
{
//echo"$user and $field success";
$query = "SELECT $field FROM b_users WHERE username='$user'";
$stmt = $pdo->prepare($query);
$stmt->execute();
$saveinfo = $stmt->fetch();
$info = $saveinfo[$field];
return $info;
}

Der Fehler:

Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\forum\moduls\func.php:22 Stack trace: #0 C:\xampp\htdocs\forum\profile.php(13): user_info('Sebastian', 'banned') #1 {main} thrown in C:\xampp\htdocs\forum\moduls\func.php on line 22
 
Hi

wenn es eine globale Variable ist, prinzipiell ja.

Aber 1: Globale Variablen führen in größeren Programmen zu Problemen (zu viele, zu wenig Übersicht, überschneidende Namen usw.). Besser gleich angewöhnen, das zu vermeiden. Abhängig davon, wie dein Programm aufgebaut ist, gibt es verschiedene "schönere" Ansätze - vermutlich ist bei dir nichts objektorientiert, und kein Framework das schon was bestehendes mitbringt?

Aber 2: PHP-Variablen (field, user) so direkt in die Query einfügen ist ein Sicherheitsrisiko: Sql-Injection. Siehe "pdo preapred statements".

Und auch Fehlerkontrollen wären nicht schlecht - was ist, wenn es zB. nichts zu fetchen gibt? Usw.
 
Danke ich wollte es sowie so anders machen .
Brauche ich $pdo = new PDO( u.s.w ) in die funktion schreiben?
weil ich würde es gerne oben in der datei als global $pdo; festlegen aber dann kommt immer noch dieser Fehler
Wenn ich es in die Funktion es schreibe funktioniert das aber ich würde es gerne oben in die datei schreiben
 
Wie gesagt, globale Variablen sollte man vermeiden. Unnötige doppelte Instanzen aber auch. Was du brauchst, nennt sich "Dependency Injection", im einfachsten Fall übergibst du der Funktion einfach ein PDO-Objekt. Somit muss ich der Aufrufer um den Erhalt dieses PDO-Objekts kümmern. Das kann sich bis ganz nach oben zu deinem Einstiegspunkt im Programm (etwa main bei C/C++/Go/Java oder "Bootstrap" bei PHP oft genannt) ziehen.
 
Zurück