Cr@wshayi: Fatal error: Call to undefined function mysqli_connect()

Guten Tag,

vieleicht können Sie mir hier weiterhelfen.

Ich bekomme immer folgende Fehlermeldung:

"Fatal error: Call to undefined function mysqli_connect() "

Der PHP Code dazu:
"
<?php

$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$email = $_POST['email'];
$betr = $_POST['betr'];
$anliegen = $_POST['anliegen'];

$db = mysqli_connect('localhost', 'user', '***********', 'db')
      or die('Fehler beim Verbinden mit MySQL-Server.');

$sql = "INSERT INTO kontakt (vorname, nachname, email, betr, anliegen)" .
"VALUES ('$vorname','$nachname','$email','$betr','$anliegen')";

$ergebnis = mysqli_query($db, $sql)
or die('Fehler bei Datenbankabfrage.');<-- Auf diese Zeile bezieht sich der Fehler

mysqli_close($db);

echo '<p>Vielen Dank ' . $vorname . '&ensp;' . $nachname . ',<br />f&uuml;r ihre E-Mail, ' . 'wir werden ihnen schnellstm&ouml;glich antworten<br /><br />';
echo 'Ihr Vorname: ' . $vorname . '<br /><br />';
echo 'Ihr Nachname: ' . $nachname . '<br /><br />';
echo 'Ihre E-Mail Adresse: ' . $email . '<br /><br />';
echo 'Ihr Betreff: ' . $betr . '<br /><br />';
echo 'Ihr Anliegen: <br />' . $anliegen . '</p>';

?>"

Für ihre Unterstützung bedanke ich mich im vorraus.

Mfg

  1. In der php.ini scheint die entsprechende Extension nicht zu existieren. Eine Extension ist eine Standard Bibliothek welche Funktionen, Klassen oder Variablen bereit stellen. In diesem Fall ist die Extension für mysqli nicht eingebunden.

    In der php.ini müsste sowas drin stehen
    extension=php_mysqli.dll
    genauer gesagt müsste diese Zeile in der nähe von dem Block
    "Dynamic Extensions"
    stehen. Da sollten viele Extension Blöcke sein. Sollte vor dem "extension=php_mysqli.dll" Block eine "#" (Raute) stehen, dann einfach die Raute entfernen.

    extension=GrußT-Rex.dll

    1. Guten Tag,
      ich danke ihnen für ihre Antwort.

      Unter den Block extension habe ich folgende Einträge stehen:

      ;Windows Extensions
      ;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
      ;
      extension=php_mbstring.dll
      ;extension=php_bz2.dll
      ;extension=php_cpdf.dll
      ;extension=php_crack.dll
      extension=php_curl.dll
      ;extension=php_db.dll
      ;extension=php_dba.dll
      ;extension=php_dbase.dll
      ;extension=php_dbx.dll
      extension=php_domxml.dll
      ;extension=php_exif.dll
      ;extension=php_fdf.dll
      ;extension=php_filepro.dll
      extension=php_gd2.dll
      extension=php_gettext.dll
      ;extension=php_hyperwave.dll
      extension=php_iconv.dll
      ;extension=php_ifx.dll
      ;extension=php_iisfunc.dll
      extension=php_imap.dll
      ;extension=php_interbase.dll
      ;extension=php_java.dll
      ;extension=php_ldap.dll
      ;extension=php_mcrypt.dll
      ;extension=php_mhash.dll
      ;extension=php_mime_magic.dll
      ;extension=php_ming.dll
      extension=php_mssql.dll
      ;extension=php_msql.dll
      ;extension=php_oci8.dll
      ;extension=php_openssl.dll
      ;extension=php_oracle.dll
      ;extension=php_pdf.dll
      ;extension=php_pgsql.dll
      ;extension=php_printer.dll
      ;extension=php_shmop.dll
      ;extension=php_snmp.dll
      extension=php_sockets.dll
      extension=php_sqlite.dll
      ;extension=php_sybase_ct.dll
      ;extension=php_w32api.dll
      ;extension=php_xmlrpc.dll
      extension=php_xslt.dll
      upload_tmp_dir= "C:\Windows\Temp"
      ;extension=php_yaz.dll
      ;extension=php_zip.dll

      die von ihnen beschriebene extension ist dort nicht deklariert wie habe ich damit jetzt umzugehen ?

      Mfg

      1. Hi!

        ich danke ihnen für ihre Antwort.

        Eigentlich ist es hier üblich, sich zu duzen.

        ;Note that MySQL and ODBC support is now built in, so no dll is needed for it.

        Sieht nach PHP 5.3 aus? Jedenfalls muss da noch hinzu:

        extension=php_mysql.dll
        extension=php_mysqli.dll

        Die erste Zeile brauchst du nicht unbedingt, wenn du nur mit mysqli arbeiten willst.

        Lo!

  2. Hello,

    bei Fragen zu Datenbanken und/oder PHP-APIs dafür solltest Du immer die verwendeten Versionen angeben. Bestimmte Funktionen gibt es eben erst ab einer bestimmten Versionsnummer.

    Und dann ist auch noch wichtig, auf welchem OS das ganze laufen soll

    Aus dem weiteren Thread entnehme ich, dass es sich vermutlich um einen XAMPP handelt?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Guten Tag,
    danke für ihre Antwort.

    Das System

    SQL-Server MySQL 5.1.56
                    PHP   5.3

    TESTSEITE

    ich hoffe mit diesen Daten können Sie mehr anfangen.

    Mfg

  4. Hi!

    "Fatal error: Call to undefined function mysqli_connect() "

    Ist im Rest des Threads schon beantwortet, hier noch allgemeine Kommentare zum Code.

    $vorname = $_POST['vorname'];
    [...]

    Es ist unsinnig, die Werte umzukopieren.

    $db = mysqli_connect('localhost', 'user', '***********', 'db')
          or die('Fehler beim Verbinden mit MySQL-Server.');

    Ein "or die()" ist keine gescheite Fehlerbehandlung. Einem Anwender eine mehr oder weniger nackige und auf jeden Fall hier abgebrochene Seite vorzusetzen bringt ihn und dich/dein Geschäft nicht weiter. Denk dir eine alternative Vorgehensweise aus, wie der Anwender doch noch zum Ziel kommen kann. Vielleicht sendest du einfach nur eine Mail an einen Bearbeiter und lässt den Datenbankeintrag sein, wenn das DBMS grad nicht will. So hast du auch noch eine Information, dass das DBMS nicht lief. Das "or die()" sieht nur der Anwender und du bekommst vom Ausfall nichts mit.

    $sql = "INSERT INTO kontakt (vorname, nachname, email, betr, anliegen)" .
    "VALUES ('$vorname','$nachname','$email','$betr','$anliegen')";

    Sowas ist gefährlich und leichtsinnig. Das einfache unmaskierte Einfügen ist eine der häufigsten und am leichtesten auszunutzenden Sicherheitslücken. Ein Großteil der erfolgreichen Angriffe, die in letzter Zeit durch die Medien gehen, sind sicherlich auf solche Versäumnisse zurückzuführen. Das Problem läst sich vermeiden, indem man den Kontextwechsel beachtet. Siehe auch Exploits of a Mom.

    $ergebnis = mysqli_query($db, $sql)
    or die('Fehler bei Datenbankabfrage.');<-- Auf diese Zeile bezieht sich der Fehler

    Kann nicht sein, er spricht vom mysqli_connect(), was weiter oben steht.

    echo '<p>Vielen Dank ' . $vorname . '&ensp;' . $nachname . ',<br />f&uuml;r ihre E-Mail, ' . 'wir werden ihnen schnellstm&ouml;glich antworten<br /><br />';

    Auch hier und beim Rest der echos ist auch der Kontextwechsel nicht beachtet worden.

    Für ihre Unterstützung bedanke ich mich im vorraus.

    Gerrn geschehen.

    Lo!

  5. Guten Tag,

    Ich bedanke mich für ihre Unterstützung meine Herren, der Fehler lag wie von ihnen beschrieben darin dass in der php.ini die Extension  MySQLi  nicht aktiviert war.

    Das Problem was ich hatte, war das es auf dem Server verschiedene php.ini Dateien zu Verfügung standen und mir dies nicht bewusst war so habe ich sozusagen eine php.ini bearbeitet die nicht relevant war.

    Zur dem beanstandeten Code und der Sicherheit bleibt mir nur zu sagen das dies kein Thema meiner bisherigen Studien Unterlagen ist sondern später aufgegriffen wird.

    Mfg

    1. Hi!

      Das Problem was ich hatte, war das es auf dem Server verschiedene php.ini Dateien zu Verfügung standen und mir dies nicht bewusst war so habe ich sozusagen eine php.ini bearbeitet die nicht relevant war.

      Welche die relevante ist, sagt ein Aufruf von phpinfo(). Im oberen Teil steht der Pfad zu den Ini-Dateien, die gelesen wurden.

      Zur dem beanstandeten Code und der Sicherheit bleibt mir nur zu sagen das dies kein Thema meiner bisherigen Studien Unterlagen ist sondern später aufgegriffen wird.

      Es ist gefährlich, erstmal ohne die Beachtung des Kontextwechsels Programmieren lernen zu wollen/sollen. Das ist einer der Top-5-Programmierfehler. Dieses Thema sollte man sich so früh wie möglich verinnerlichen.

      Lo!