PHP PDO funktioniert nicht?
Hallo,
ich will gerade eine Verbindung zu einer Datenbank per pdo aufbauen.
Bis jetzt hat es immer funktioniert, aber ich weiß gerade nicht, was ich falsch mache.
Hier ist mein Test-Skript:
<?
if(class_exists('PDO')){
$pdo = new PDO('mysql:host=###########;dbname=###########', '###########', '###########');
echo "pdo";
}
else{
echo "ERROR";
}
Als Ausgabe bekomme ich eine leere Seite. Daraus habe ich geschlossen, dass der Fehler in der Zeile
$pdo = new PDO(.......
liegen muss. Kann mir jemand sagen, was ich falsch gemacht habe oder was ich noch beachten muss?
######### GELÖST ##########
Bei Strato ist es nicht möglich, von außerhalb auf Datenbanken zuzugreifen. Deshalb wurde vom Server immer ein Fehler gemeldet.
5 Antworten
Schau im Log nach um was für einen Fehler es sich handelt:
tail -f /var/log/apache2/error.log
das wäre der Standart Logpath.
was hast du denn für einen Webserver? bzw wo hostest du? Und was ist die Serversoftware?
Apache2 oder nginx?
Mein Server wird von Strato gehostet und läuft lauf phpinfo() mit Apache/2.4.48 (Unix)
unter phpinfo findest du auch den Pfad zum error.log.
Du kannst ja einfach mal mit Strg+F nach "error.log" suchen, und dann in meinem Befehl den Pfad ersetzen.
irgendetwas ist komisch, weil ich finde beim Suchen gar kein error.log
hinter dem eintrag 'error_log' steht auch 'no value'
das ist weird... strato hat doch bestimmt einen Support, dort kannst du ja mal nachfragen.
also mittlerweile habe ich eine Anleitung von Strato gefunden. Ich habe jetzt ein Logfile, in dass ich mit error_log(); auch Meldungen speichern kann. Nur werden immer noch nicht die Fehler zu meinem eigentlichen Problem angezeigt. Muss ich dazu noch irgendetwas einstellen?
du könntest versuchen anstatt das logfile auszulesen die errors auf der Webseite auszugeben...
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
es kann aber gut sein, das du dann die Seite mit dem Firefox besuchen musst, damit du den Fehler siehst. (ich glaube chrome zeigt eine eigene Meldung an, welche nicht den echten Fehler enthält bei einer 500 Server antwort)
Danke! Jetzt hat es die Fehler ausgegeben.
Hier die Fehlermeldung:
Fatal error: Uncaught PDOException: SQLSTATE[00000] [2004] Can't create TCP/IP socket (0) in /mnt/web412/b2/37/51641537/htdocs/meinpfad/pdo.php:14
Stack trace:
#0 /mnt/web412/b2/37/51641537/htdocs/meinpfad/pdo.php(14): PDO->__construct()
#1 {main}
thrown in /mnt/web412/b2/37/51641537/htdocs/meinpfad/pdo.php on line 14
Vielleicht weißt du was das Problem ist....
Hier nochmal der aktuelle Code:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$host = "rdbms.strato.de";
$dbname = "###########";
$user = "###########";
$pass = "###########";
$pdo = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "UTF8"'
) );
und Firefox benutze ich sowieso ;)
Firefox ist immer gut! :)
Der Fehler lässt eigentlich nur darauf schließen das der Host, auf welchem die Seite läuft keine Ressourcen mehr für neue Verbindungen übrig hat.
-> https://stackoverflow.com/questions/27696953/mysql-cant-create-tcp-ip-socket-105
Schicke den Fehler am besten mal in den Strato Support, und frage ob die das mal durchchecken können.
An deinem Code ist nichts falsch, liegt höchstwahrscheinlich an der Serverkonfiguration.
Da du konstant leere Seiten bekommst. Vermute ich, dass du Einträge in deinem Logfile hast, die eine Fehlermeldung enthalten.
Daher schau mal in dein PHP-Logfile, zum Zeitpunkt der Ausführung.
Ah danke, gute Idee. Aber weißt du, wo ich diesen Logfile finde? Ich habe diese Funktion noch nie benutzt.
hi, sorry für die späte antwort, aber er läuft mit Apache/2.4.48 (Unix)
also ich habe das Problem so gelöst, dass ich die Fehler auf der Website ausgebe (siehe Antwort von @MrCommandBlock)
und gerade eben hatte ich noch ned spontanen Einfall, den Pfad zur selbst erstellten error.log per ini_set() festzulegen. Das hat jetzt auch geklappt.
Lass dir doch mal $pdo über var_dump ausgeben.
<?
$pdo = new PDO('mysql:host=######;dbname=#######', '#########', '#########);
var_dump($pdo);
Wenn ich das so ausführe, kommt wieder eine leere Seite
Sind denn Short Tags aktiviert? sonst braucht es <?php statt nur <?
Und ist die entsprechende PDO Extension denn geladen?
Ohne Short Tags kommt das gleiche Ergebnis wie vorher
und dass die PDO-Extension geladen ist, müsste ich doch eigentlich daran erkennen, dass class_exists("PDO") true zurückgibt, oder?
Warum führst du die Zeilen nicht einzeln aus?
Habe ich schon gemacht. Das, was ich gepostet habe, war nur eine Art Testcode, also eigentlich ziemlich unnnötig, das mit zu posten haha
aber ich habe mit class_exists herausgefunden, dass die Klasse PDO bei mir überhaupt vorhanden ist
dieser pfad existiert bei mir leider nicht. Ich komme nur bis /var/log