2016-06-17 6 views
-2

Hier Code:Aufruf einer Member-Funktion query() auf null - PHP

$connect = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
if($connect->connect_errno) { 
    printf("Connect failed: %s\n", $connect->connect_error); 
    exit(); 
} 

function send($username="", $password="") { 
    $connect->query("INSERT INTO table1 (username, password) VALUES ('$username', '$password')"); 
} 
$connect->close(); 

Notice: Undefined variable: connect in C:\xampp\htdocs\playground01\build\components\includes\root.php on line 44

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\playground01\build\components\includes\root.php on line 44

Wo ist ein Problem?

+1

Mögliche Duplikate von [Referenz - Was bedeutet dieser Fehler in PHP?] (Http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) – Jonathan

+0

Wenn dies behebt das Problem Bitte markieren Sie die Antwort als akzeptiert. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – chris85

Antwort

0

Sie müssen declare, die globale Variablen Sie gehen in der Funktion verwenden, wenn Sie dies tun möchten:

function send($username="", $password="") { 
    global $connect; 
    $connect->query("INSERT INTO table1 (username, password) VALUES ('$username', '$password')"); 
} 

Oder noch besser, machen der Verbindung einen Funktionsparameter:

function send($connect, $username="", $password="") { 
    $connect->query("INSERT INTO table1 (username, password) VALUES ('$username', '$password')"); 
} 
+1

Guten Gott, es ist schlecht das zu tun – Jonathan

+0

@ Jonathan Kein Zweifel, aber das war nicht die Frage hier. – Timo

+1

sollten Sie erklären, warum die Verwendung von Globals in dieser Antwort auch böse ist – Jonathan

1

Dies ist wegen variable scope in PHP. $connect ist außerhalb send definiert, so dass es nicht zugänglich ist. Übergeben Sie es als Parameter, definieren Sie es in der Funktion oder verwenden Sie global.

a)

function send($username="", $password="", $connect) { 
    $connect->query("INSERT INTO table1 (username, password) VALUES ('$username', '$password')"); 
} 
$connect->close(); 

Dann im send Aufruf des $connect passieren.

b)

function send($username="", $password="", $connect) { 
    $connect = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
if($connect->connect_errno) { 
    printf("Connect failed: %s\n", $connect->connect_error); 
    exit(); 
} 
    $connect->query("INSERT INTO table1 (username, password) VALUES ('$username', '$password')"); 
} 
$connect->close(); 

c)

function send($username="", $password="") { 
    global $connect; 
    $connect->query("INSERT INTO table1 (username, password) VALUES ('$username', '$password')"); 
} 
$connect->close(); 

Zusätzliche sollten Sie parameterized queries mit prepared statements verwendet werden.

Eine dritte Anmerkung, Passwörter sollten nicht im Klartext gespeichert werden, http://security.blogoverflow.com/2011/11/why-passwords-should-be-hashed/.

Verwandte Themen