Fatal error: Call to undefined function mysqli_connect()
Cr@wshayi
- php
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 . ' ' . $nachname . ',<br />für ihre E-Mail, ' . 'wir werden ihnen schnellstmö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
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
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
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!
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
Guten Tag,
danke für ihre Antwort.
SQL-Server MySQL 5.1.56
PHP 5.3
ich hoffe mit diesen Daten können Sie mehr anfangen.
Mfg
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 . ' ' . $nachname . ',<br />für ihre E-Mail, ' . 'wir werden ihnen schnellstmö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!
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
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!