mysql_connect lässt Skript abstürzen

nietaL

NGBler
Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey Leute,

nachdem ich ein paar Monate nicht mehr an meinem Projekt gearbeitet hatte, wollte ich mich heute einmal wieder einloggen. Leider schaffte ich es nicht einmal bis zum Verbinden zur Datenbank. Nach langem Hin und Her und Herumprobieren hat sich herausgestellt, dass jedes Skript an immer derselben Stelle stoppt: mysql_connect. Es ist egal, ob die Login-Daten richtig oder falsch sind. Auch ein OR DIE bringt nichts - es wird schlichts NICHTS ausgegeben, das auf mysql_connect folgt. Ich habe eigene und fremde Skripts probiert. Bis zum Verbinden wird alles angezeigt, alles danach nicht. (ECHOs nach jeder Zeile)

Ich bin auf einem Root-Server unterwegs und verwalte alles mit Plesk bzw. phpMyAdmin.

Hat jemand noch einen Tip, wie ich dem Fehler auf die Spur kommen kann? Fehlerausgabe ist natürlich immer an: error_reporting(-1);

Hoffnungsvoll und im Voraus dankend
Nietal
 
quatsch, wer braucht denn schon Quellcode zum Debuggen eines komplett unbekannten Fehlers? Die Glaskugel sollte doch reichen :/

Gibt's die Datenbank denn? Kannst du dich mit einem Admin-Tool (PMA hast du ja genannt) oder über die Kommandozeile einloggen? Was steht denn in den PHP- und MySQL-Logs?
 
Zunächst, kein "mysql" mehr in PHP verwenden, die Erweiterung ist veraltet und funktionell Steinzeitlich.
Als nächstes mal ins log deines Webservers gucken.

Wenn du nicht weisst wo letzteres liegt solltest du diese "Plesk Admistration" lieber sein lassen und den Server vorerst deaktivieren.
 
  • Thread Starter Thread Starter
  • #5
Aufgrund der Einfachheit des Skripts dachte ich mir, es sparen zu können. Aber kein Problem. Das ist eines der Skripte:

[src=php]<?php
error_reporting(-1);
# Fill our vars and run on cli
# $ php -f db-connect-test.php
$dbname = 'bla';
$dbuser = 'bla';
$dbpass = 'bla';
$dbhost = 'localhost';

echo "TestA";

$connect = mysql_connect($dbhost, $dbuser, $dbpass) or die("Unable to Connect to '$dbhost'");

echo "TestB";

mysql_select_db($dbname) or die("Could not open the db '$dbname'");

echo "TestC";
?>
[/src]

Ausgabe:

Gäbe es die DB nicht oder wäre irgendeine Angabe falsch, müsste ja OR DIE greifen. Aber "Unable to Connect ..." erscheint gar nicht erst.

Mit PMA kann ich mich einloggen, aber mit Schwierigkeiten. Das Sicherheitszertifikat sei abgelaufen und ich komme über den Login nur hinaus, wenn ich die Firewall kurz deaktiviere. Nach dem Login kann ich sie wieder einschalten und PMA arbeitet normal. Kann es daran liegen?

u_extend2.log
#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2016-03-24 16:13:25 W3SVC6 h2XXXXXXX 81.XXX.XXX.XX GET /test.php - 80 - 81.XXX.XXX.XXXHTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+rv:44.0)+Gecko/20100101+Firefox/44.0 - - h2XXXXXXX.stratoserver.net 200 0 0 231 453 15
 
Hm, command line interface?
Könnte sein das du da noch was zusätzlich installieren musst, lange her das ich das ausprobiert habe. Und bei Windowsserver könnte ich dir das sowieso nicht sagen.

Oder nur Kommentare mit kopiert?

Generell, versuch mal was simpleres das nur mit den Standardbibliotheken läuft.
 
  • Thread Starter Thread Starter
  • #7
noch simpler? :-D

[src=php]<?php
error_reporting(-1);
$db = mysqli_connect("localhost", "xxxx", "yyyy", "zzzz");

echo "TestA";
?>[/src]

Ausgabe:

Jetzt sogar mit mysqli. Wieso gibt es keine Fehlermeldung?

*edit* Das Einloggen in PMA funktioniert doch unabhängig von der Firewall mal ja mal nein. Meistens kommt ein 500er...
 
Zuletzt bearbeitet:
Versuch mal das hier einzubauen und dir anzeigen zu lassen:

Aber da steht auch, falls du eine ältere PHP Version vorfindest:
Warnung

The mysqli->connect_error property only works properly as of PHP versions 5.2.9 and 5.3.0. Use the mysqli_connect_error() function if compatibility with earlier PHP versions is required.
 


Der Hinweis ist aus den Handbüchern zu dem Befehl - aber du hast schon recht, mysql wird nicht mehr unterstützt ab einer gewissen Version, es ging aber um "mysqli" (connect error), da er auf mysqli umgesattelt hat, nicht mehr nur "mysql".

------

Wobei, schon komisch das überhaupt keine Ausgabe kommt mehr nach dem connect ausgeführt wird, irgendwo inside PHP/mysql stirbt der Befehl oder bekommt etwas unerwartetes von mySQL zurück.

Entweder die Datenbank oder die PHP Installation oder beides.

Aber mysql kann auch fleißig loggen um das zu troubleshooten, setzt natürlich voraus man hat darauf Zugriff, soweit kenn ich mich damit dann auch nicht aus:
 
Zuletzt bearbeitet:
Hatte mir das 2. Script nicht angesehen und im ersten wars noch mysql. Spielt auch keine Rolle, das Script war richtig und es ist offensichtlich dass es an der Serverconfig liegt. Ohne Logfiles wirds halt schwer da etwas zu sagen. :)
 

Dein Beispiel enthält im Bezug auf meine Aussage keine relevante Änderung.

Die absurd veraltete "mysql"-client Bibliothek verwendest du immer noch.


Na alles an Zusatzbibliotheken, abgesehen davon das speziell mysql stark veraltet ist weis ich nicht wie sich die Installation auf einem Windowsserver abspielt oder sagt dir deine Kristallkugel ob Plesk in seiner Version mit all diesem Scheiss kompatibel ist und ihn richtig konfiguriert oder das ganze überhaupt installiert ist?

Ne phpinfo Ausgabe wäre ein guter Anfang, hab ich aber zugegebenermaßen selber erst jetzt dran gedacht.
 
  • Thread Starter Thread Starter
  • #15
php.info


Versuch mal das hier einzubauen und dir anzeigen zu lassen
Da ja nicht einmal ECHO danach funktioniert, brachte das natürlich leider auch kein Ergebnis.

Es hat ja alles funktioniert. Vor ein paar Monaten. Dann habe ich nichts gemacht, weil ich beruflich stärker eingespannt war. Heute wollte ich mal wieder reinschauen und es geht nüscht mehr. Ich habe (ehrlich) keine Veränderungen seit dem vorgenommen :o
 
Zuletzt bearbeitet:
Ok da haben wir es doch, sofern sich PHP in dem Aspekt nicht von der Linuxversion unterscheidet fehlen dir wie ich vermutet habe die Libs.

Denn der Block für mysqli sieht etwa so aus und fehlt bei dir komplett:
mysqli

MysqlI Support enabled
Client API library version 5.5.44
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 0
Client API header version 5.5.44
MYSQLI_SOCKET /var/run/mysqld/mysqld.sock

Directive Local Value Master Value
mysqli.allow_local_infile On On
mysqli.allow_persistent On On
mysqli.default_host no value no value
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket /var/run/mysqld/mysqld.sock /var/run/mysqld/mysqld.sock
mysqli.default_user no value no value
mysqli.max_links Unlimited Unlimited
mysqli.max_persistent Unlimited Unlimited
mysqli.reconnect Off Off

Edit:
bei Xamp(Win7) siehst wie folgt aus, also müsste es auch bei Windows Server so sein:
mysqli

MysqlI Support enabled
Client API library version mysqlnd 5.0.11-dev - 20120503 - $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 0
Directive Local Value Master Value
mysqli.allow_local_infile On On
mysqli.allow_persistent On On
mysqli.default_host no value no value
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket MySQL MySQL
mysqli.default_user no value no value
mysqli.max_links Unlimited Unlimited
mysqli.max_persistent Unlimited Unlimited
mysqli.reconnect Off Off
mysqli.rollback_on_cached_plink Off Off

Potentiell alles Mist weil kein Apache! Solltest dich vielleicht explizit an jemanden wenden der Ahnung von Plesk und deinem Windowsserver hat.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #18
Also nachdem ich alles auf mysqli umgeändert habe, klappt es jetzt. Da hatte sich noch eine Datenbankabfrage versteckt. Danke!
 
Zurück
Oben