Hallo zusammen,
Ich habe das Webhosting Expert L de a1 Paket und habe ein Problem eine Verbindung von extern aufzubauen.
Ich bekomme folgenden Fehler wenn ich versuche was von auserhalb auf meiner Datenbank zu speichern.
Warning: mysql_connect(): Connection refused in /var/www/vhosts/hosting3381.af923.netcup.net/httpdocs/DB.php on line 5 no DB Connection
Kann mir bitte jemand helfen
Datenbank connection Problem
- DeWa92
- Erledigt
-
-
Welche IP benutzt du für die Verbindung?
-
Danke, nachdem du nach meiner IP gefragt hast habe ich sie überprüft und geändert.
Dennoch habe ich ein Problem und zwar erscheint bei mir keine Fehlermeldung mehr, aber in meiner Datenbank wird auch nichts hinzugefügt.PHP<?php $sql_connect = mysql_connect("IP", "Name", "PW") or die ("no DB Connection"); mysql_select_db("DB_Name") or die ("DB not found"); $score= "7654"; mysql_query("INSERT INTO Test (Name) VALUES ($score)"); mysql_close($sql_connect);?>
Habe ich da irgendwo einen Fehler?
Ohne einer Fehlermeldung habe ich echt keine Chance nach einer Lösung zu suchen -
Die mysql-Erweiterung von PHP ist übrigens veraltet und wird in Kürze entfernt: PHP: Choosing an API - Manual – Du solltest gleich mit mysqli oder PDO anfangen, wenn Du etwas neu entwickelst!
Wenn Du bei mysql_query() einen Fehler sehen willst, musst Du diesen auch explizit anfordern: PHP: mysql_errno - Manual & PHP: mysql_error - Manual (z.B. mit var_dump(), printf() oder was auch immer ausgeben, wenn der Query fehlschlägt)
MfG Christian
-
Nur so ganz am Rande, schreibst du gerade selbst ein Script oder versuchst du einem bereits exestierenden Script etwas beizufügen?
Ich würde nur noch mysqli_x ab PHP 5.x benutzen, weil es neuer ist und die performance sowie sicherheit gegenüber mysql_x verbessert wurde.
Aber nun kommen wir zu deinem eigentlichen Problem mein Lösungsansatz wäre der hier:
PHP
Alles anzeigen<?php //Vorinformationen zur Verbindung $host = "IP"; $name = "NAME"; $pw = "PW"; $db = "DB"; //Testen der Verbindung $sql_connect = new mysqli($host,$name,$pw,$db); //legt alles fest und baut eine Verbindung auf if ($sql_connect->connect_errno){ //Prüft ob die Verbindung zum MySQL-Server funktioniert. echo "Verbindungsfehler: [".($sql_connect->connect_errno)."] ".($sql_connect->connect_error);//Gibt die Fehlermeldung aus falls die Verbindung fehlschlägt exit(); } else { echo "Verbindungaufgebaut!"; //Gibt die Antwort zurück das die Verbindung funktioniert } $score= "7654"; //Inhalt den man wegschreiben möchte if ($sql_connect->query("INSERT INTO Test(Name) VALUES ($score)")){ //Prüft ob das Schreiben des Datensatzes erfolgreich war echo "Datensatz wurde weggeschrieben!"; //Gibt die Antwort zurück das es funktioniert hat } else { echo "Datensatz konnte nicht weggeschrieben werden! Fehlermeldung:".($sql_connect->error); //Gibt die Antwort zurück das es Fehlgeschlagen ist } $sql_connect->close(); //Schließt die Verbidnung zum MySQL-Server ?>
Falls ich in meinem Code irgendwelche Fehler habe oder Operationen unschön wirken wäre ich über eine Kritik froh
Hm da war der Killer wieder mal schneller typisch
Edit: ($sql_connect->error), und anderes..
-
Wenn schon auf mysqli gesetzt wird, bitte auch konsequent
mysql_error kann also entweder durch mysqli_error ersetzt werden, oder wenn man weiter dem objektorientierter Stil folgt durch $sql_connect->error -
Nur als Tipp am Rande: mysqli kann auch von selbst Exceptions bei Fehlern werfen, das erspart einiges an Arbeit! Die kann man dann immer noch abfangen, um eigene Behandlungen zu implementieren:
Und wenn man schon mysqli verwendet, dann bitte auch gleich Prepared Statements, um SQL-Injection effektiv zu verhindern. Ist für das simple Beispiel natürlich übertrieben, wenn ein Typcast zur Absicherung reicht, aber das wird wohl kaum der vollständige Query bleiben: PHP: Prepared Statements - Manual
MfG Christian
-
Super, danke.
Ihr seid die besten
Noch ein kleine verständniss frage.
Kann ich einfach so Mysqli verwenden? Muss noch irgendwas irgendwo eingestellt werden oder sind es
einfach nur die Befehle die geändert werden?
Vielen dank -
MySQLi ist mittlerweile Standard, da die MySQL-Erweiterung nun schon einige Jahre veraltet ist.
-
Alles klar, eine letzde frage hätte ich aber noch und dann sollte auch alles problemlos klappen.
In welchen Ordner sollte ich meine crossdomain.xml Datei speichern?
Danke -
In welchen Ordner sollte ich meine crossdomain.xml Datei speichern?
Sowas braucht man 2015 immer noch?afaik (ist lange her), einfach in den Stammpfad, also dort wo auch die Dateien unter / liegen, damit sie nachher als example.com/crossdomain.xml aufrufbar ist.
MfG Christian
-
Danke
Bekomme irgendwie dennoch eine Fehlermeldung von meiner Gameengine in der ich entwickle.
So sieht momentan mein Script aus.Per WWW Funktion meines C# Scripts wird die Variable newName zu meinem php file geschickt und sollte in $name gespeichert und
anschließend in meiner Datenbank geschrieben werden.
Gibt es vielleicht noch irgendwo eine Sicherheitseinstellung die dies Verhindert?PHP
Alles anzeigen<?php //Vorinformationen zur Verbindung $host = "IP"; $name = "Name"; $pw = "iPWl"; $db = "DB_NAME"; //Testen der Verbindung $sql_connect = new mysqli($host,$name,$pw,$db); //legt alles fest und baut eine Verbindung auf if ($sql_connect->connect_errno){ //Prüft ob die Verbindung zum MySQL-Server funktioniert. echo "Verbindungsfehler: [".($sql_connect->connect_errno)."] ".($sql_connect->connect_error);//Gibt die Fehlermeldung //aus falls die Verbindung fehlschlägt exit(); } else { echo "Verbindungaufgebaut!"; //Gibt die Antwort zurück das die Verbindung funktioniert } $name = $_POST['newName']; //Inhalt den man wegschreiben möchte if ($sql_connect->query("INSERT INTO Test(Name) VALUES ($name)")){ //Prüft ob das Schreiben des Datensatzes erfolgreich war echo "Datensatz wurde weggeschrieben!"; //Gibt die Antwort zurück das es funktioniert hat } else { echo "Datensatz konnte nicht weggeschrieben werden! Fehlermeldung:".($sql_connect->error); //Gibt die Antwort zurück das es Fehlgeschlagen ist } $sql_connect->close(); //Schließt die Verbidnung zum MySQL-Server?>
-
Der Wert gehört in einfache Anführungszeichen beim INSERT, deshalb funktioniert es wahrscheinlich nicht. Ist aber auch egal, da Du hiermit das Paradebeispiel einer SQL-Injection-Lücke zeigst. Du musst die Werte vorher unbedingt maskieren (Stichwort mysqli_real_escape_string) oder wie schon weiter oben geschrieben gleich auf Prepared Statements setzen. Das ist in der PHP-Dokumentation eigentlich alles mit schönen Beispielen erklärt.
Achja: Feld-/Tabellennamen solltest Du innerhalb von `` setzen. Gewöhne es Dir gleich so an, dann hast Du später weniger Probleme, wenn es sich dabei um gleichlautende Befehle handelt.
MfG Christian
-
$_POST[''] direkt weg zuschreiben ohne was zu Prüfen ist eigentlich nun ja 'dämlich'. Filtern und Prüfen der Variable ist gerade in der Situation extrem wichtig, den $name = Post; $name in DB rein und schon gehört dir der Server nicht mehr. SICHERE solche Sachen extrem gut ab, benutzte SSL bei Formularen und so weiter.
Kann C++ kein SQL? Würde mich extrem wundern weil du Äpfel und Birnen kombinierst obwohl Äpfel reichen.
Nochwas: KEIN ROOT FÜR MYSQL LOGINS!
-
Noch als Information an die Leute die über diesen Beitrag stolpern, nachdem ich mal ein richtiges SQL-Script geschrieben hatte und keine Tabelle erzeugt wurde bin ich stuzig geworden. Nach durchgehen des Codes wo ich keine Fehler feststellen konnte, hatte ich mal Firebug angeschmissen direkt sprang mir ein "500-Error" in der Konsole entgegen. Nun schaust du mal in die Lighttpd (/var/log/lighttpd/error.log) rein und stellst fest das dort ein Eintrag mit
ist. Natürlich wurde ich stuzig wieso diese Effekt auftrit, da hatte ich einen Beitrag bei Stackoverflow gefunden: Mysqli class not found. Using percona, php5-fpm, nginx, phalcon - Stack Overflow in dem die Lösung war bei $connect = new mysqli(host,user,pw,db); ein \ vor mysqli zu machen. Der Grund ist dieser: PHP: Using namespaces: fallback to global function/constant - Manual
Webserver: lighttpd/1.4.35 (ssl) - a light and fast webserver | Build-Date: Nov 2 2014 03:47:15
PHP: PHP 5.6.14
MySQL: mysql Ver 14.14 Distrib 5.5.46
FastCGI: 2.4.6