MySQL: Fatal error: Call to a member function prepare()

beatles

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2008
Beiträge
168
Reaktionspunkte
1
Hallo Zusammen

Ich habe ein Beispiel Skript von einer Seite geladen wo ein User sich registrieren kann und sein Name, Email etc. in der MySQL DB gespeichert wird.

Leider kriege ich immer einen Fehler obwohl die Verbindung erfolgreich hergestellt werden konnte.
Worin könnte das liegen? Ich verbinde mich mittels MySQLi

dbconfig.php
PHP:
<?php
$db_host = "localhost";
$db_user = "xxx";
$db_pass = "xxx";

// Create connection
$conn = mysqli_connect($db_host, $db_user, $db_pass);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

Hier binde ich die dbconfig.php wieder ein und wenn der User noch nicht existiert sollte er in der DB eingetragen werden:
register.php
PHP:
<?php
   
    require_once 'dbconfig.php';

    if($_POST)
    {
        $user_name = $_POST['user_name'];
        $user_email = $_POST['user_email'];
        $user_password = $_POST['password'];
        $joining_date =date('Y-m-d H:i:s');
       
        $password = md5($user_password);
       
        try
        {   
       
            $stmt = $db_con->prepare("SELECT * FROM tbl_users WHERE user_email=:email");
            $stmt->execute(array(":email"=>$user_email));
            $count = $stmt->rowCount();
           
            if($count==0)
...
...
Auf was könnte dieser Error hinweisen: Fatal error: Call to a member function prepare() on null in /home/httpd/vhosts/xxx.com/httpdocs/register.php on line 17!

Besten Dank für einen Hinweis eines Experten.
 
null sagt der, d.h. da könnte dein
SELECT * FROM tbl_users WHERE user_email=:email
ein leeres ergebnis haben?
 
Nein. Du mischst die Objekt-orientiert und prozedurale Variante.

mysqli_connect = prozedurale
$db_con->prepare oder $stmt->execute oder $stmt->rowCount = objekt-orientiert

also wenn du so anfaengst, dann ist db_con eine instanz der mysqli Klasse:
$db_con = new mysqli($db_host, $db_user, $db_pass);

(ich wuerde es dann nicht $db_con nennen, sondern $mysqli, aber das ist nur optik)
 
Beim Durchsehen deiner Codeschnipsel fallen mir ein paar Probleme mit deinem Script auf:
  • die() ist keine Fehlerbehandlung. Erstens bringt die Meldung den Besuchern deiner Seite nichts, und zweitens verrätst du so potentiellen Angreifern viel zu viel über dein System.
  • MD5 ist für Passwörter eine schlechte Idee, insbesondere wenn kein Salt verwendet wird. Verwende die PHP-Funktionen password_hash und password_verify bzw. die Kompatibilitäts-Library von ircmaxell, falls du noch eine uralte PHP-Version hast.
  • Auf dem richtigen Webspace solltest du unbedingt sicherstellen, dass keine Fehler ala "Fatal error: Call to a member function prepare() on null" angezeigt werden. Zur Entwicklung ist die Fehlerausgabe sinnvoll, aber auf der öffentlichen Seite hat sie nichts verloren.
 
Zurück
Oben Unten