pdo – Aufruf einer Memberfunktion prepare () auf einem Nicht-Objekt

Dieser Code erhält einen Fehler :

Schwerwiegender Fehler: Aufruf einer Memberfunktion prepare () für ein Nichtobjekt in C: \ Benutzer \ fel \ VertrigoServ \ www \ login \ validation.php in Zeile 42

CODE:

function repetirDados($email) { if(!empty($_POST['email'])) { $query = "SELECT email FROM users WHERE email = ?"; $stmt = $pdo->prepare($query); // error line: line 42 $email = mysql_real_escape_string($_POST['email']); $stmt->bindValue(1, $email); $ok = $stmt->execute(); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($results == 0) { return true; } else { echo '

something

'; return false; } } }

Was ist die mögliche Ursache? Eine andere Frage , was ist mit mysql_num_rows ? Entschuldigung, ich bin ein Neuling mit PDO

$pdo ist undefiniert. Sie deklarieren es nicht innerhalb der function und es wird nicht als Argument übergeben.

Sie müssen es entweder (gut) übergeben oder im globalen Namespace definieren und für Ihre function verfügbar machen, indem Sie global $pdo oben (schlecht) platzieren.

Sie können eine databaseverbindungsfunktion auf derselben PHP-Seite einrichten und diese function aufrufen, wann immer Sie möchten. Wie,

 public function connection() { $dbc = new PDO("mysql:host=localhost;dbname=chat","root",""); } public function1() { this->connection(); // now you have the connection.. now, time for to do some query.. } public function2() { this->connection(); // now do query stuffs.. } 

Oder Sie können die databaseverbindungslinie auf dieser Seite einfach jedes Mal neu schreiben, wenn Sie sie benötigen. Wie,

 public function a() { // connecting DB for this function a only... $dbc = new PDO("mysql:host=localhost;dbname=chat","root",""); // bla bla bla... } public function b() { // connecting DB for this function b only... $dbc = new PDO("mysql:host=localhost;dbname=chat","root",""); // abra ke dabra... boom } 

Das $pdo Objekt befindet sich nicht innerhalb Ihrer function.

@Anvd. Ich hatte das gleiche Problem, aber ich habe es getriggers, indem ich die database auf der gleichen Seite verband und nicht nur die Coonnecting-Seite einschloss. Es hat für mich funktioniert

 < ?php try { $pdo = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf-8','root',''); } catch(PDOException $e){ echo 'Connection failed'.$e->getMessage(); } ?> 

In Bezug auf das Äquivalent von mysql_num_rows in PDO ist im Grunde FETCH_NUM es gibt eine Indexnummer der ausgewählten Zeile zurück.

Ich bekam den gleichen Fehler: Dann sah ich, dass ich meine class anrief, nachdem ich die PDO-Verbindung geschlossen hatte.

Ja, ich habe das auch auf die harte Tour gelernt, Sie müssen die DB-Verbindung innerhalb der function öffnen. Ich nahm an, die Verbindung zur DB würde innerhalb der function geöffnet werden, wenn ich vor dem Aufruf der function geöffnet habe, aber nein. Damit:

 function whatever(){ //OPEN DB CONNECTION CODE //CLOSE DB return whateverValue; } 

Sie können diesen Fehler auch von aktiven, ungepufferten Abfragen erhalten, die noch aktiv sind.

Also, auf der Linie 41,

 $stmt = null; 

Probieren Sie diesen Code aus

 $query =$pdo->prepare("SELECT email FROM users WHERE email = ?"); $email = mysql_real_escape_string($_POST['email']); $stmt->bindValue(1, $email); $ok = $stmt->execute(); $results = $query->fetchAll(PDO::FETCH_ASSOC); if ($results == 0) { return true; } else { echo '

something

'; return false; }