Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zugriffsverweigerungsfehler beim Ausführen von mysql_query in PHP

Letztes Update:

Ich habe eine Chat-Sitzung mit Aditii eröffnet und wir haben dort etwas debuggt.

Wie sich herausstellte, bestand das Problem darin, dass sie von einem Server, auf dem kurze Tags aktiviert waren, auf einen Server aktualisiert hatte, auf dem dies nicht der Fall war. Infolgedessen wurde ihr gesamter Code, der in kurzen Tags eingeschlossen war, nicht ausgeführt, einschließlich ihrer Konfigurationsdatei.

Der Fehler in der Frage war auf mysql_connect() zurückzuführen Funktion nicht ausgeführt, weil die ganze Datei nicht ausgeführt wurde. Ein mysql_query() Anruf, der sich auf diese Verbindung stützte, ist deswegen fehlgeschlagen.

Nachdem sie ihre kurzen Tags korrigiert hatte, um den vollständigen <?php zu verwenden Tag, diese Datei ausgeführt. Wie in meiner ursprünglichen Antwort auf diese Frage besprochen, werden die einfachen Anführungszeichen um die Variablen an mysql_connect() übergeben hat am Ende Probleme gemacht. Nach der Anweisung, diese einfachen Anführungszeichen zu entfernen, war die Verbindung erfolgreich und das Problem wurde behoben.

Die gesamte Debugging-Sitzung für alle Interessierten finden Sie hier .

Erste Aktualisierung:

Nachdem ich mir das etwas genauer angesehen habe, gibt es zwei Teile, die nicht zu meiner ursprünglichen Antwort passen (die ich am Ende dieser Antwort behalten habe, da sie immer noch einige gute Informationen enthält).

Erstens wird der Fehler durch mysql_query() ausgelöst nicht mysql_connect() . Dies liegt wahrscheinlich daran, dass es keine Fehlerbehandlung rund um die Verbindung gibt, sodass der Fehler erst später bemerkt wird. Versuchen Sie, eine Fehlerbehandlung um die Verbindung herum hinzuzufügen:

if (!($con = mysql_connect('$localhost','$username','$password'))) {
  echo mysql_error();
}

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

Im obigen Fall werden Fehler angezeigt, sobald der Fehler auftritt.

Das zweite, was ich sehe, ist, dass Sie sich mit localhost verbinden mit dem ODBC Benutzer. Das macht keinen Sinn wenn der Fehler durch den oben angezeigten Verbindungscode ausgelöst wird. Entweder würden Sie sich mit einem Benutzer namens $username anmelden wenn Ihr Problem das Problem mit einfachen Anführungszeichen ist, das ich unten erkläre, oder root wenn nicht.

Es sieht so aus, als ob PHP versucht, sich mit den Standardanmeldeinformationen für Ihr PHP-Setup zu verbinden (zu finden in Ihrer php.ini -Datei) und nicht die von Ihnen angegebenen Anmeldeinformationen. Das lässt mich glauben, dass die Linien, die Sie uns zeigen, nicht wirklich die Linien sind, die ausgeführt werden. Sind Sie sicher, dass Sie nicht versuchen, an anderer Stelle in Ihrem Code eine Verbindung herzustellen? Wenn ja, vermute ich, dass Ihr Fehler in diesem Teil des Codes liegt.

Es ist auch möglich (ich müsste das überprüfen), wenn Sie versuchen, mysql_query() auszuführen gegen eine Null-Verbindung, vielleicht versucht PHP, eine Verbindung für Sie herzustellen. Darauf würde ich mich aber nicht verlassen.

Ich schlage vor, dass Sie versuchen, den oben bereitgestellten aktualisierten Code auszuführen, der mysql_error() verwendet Funktion, um auftretende Fehler anzuzeigen. Sie könnten sogar etwas echo hinzufügen eigenen Statements in diesen Blöcken, für etwas gutes altmodisches printf-Debugging.

Ursprüngliche Antwort:

Das Problem ist, dass Sie Ihre Variablen in einfache Anführungszeichen setzen. Wenn Sie sie in einfache Anführungszeichen setzen, wertet PHP die Variable nicht auf den Wert aus. Zum Beispiel, anstatt root zu übergeben Als zweites Argument übergeben Sie $username . Am Ende versuchen Sie, sich bei einem Server namens $localhost anzumelden mit einem Benutzer namens $username mit einem Passwort von $password .

Werfen Sie einen Blick auf die PHP-Dokumentationsseite für Strings . Es erklärt dies:

Wenn Sie Variablen innerhalb eines Strings verwenden möchten, müssen Sie double verwenden Anführungszeichen, nicht einzeln. In diesem Fall müssen Sie diese Variablen jedoch überhaupt nicht in Anführungszeichen setzen, da ihre Werte bereits sind Saiten. Sie können die Variable einfach alleine übergeben. Versuchen Sie Folgendes:

$con=mysql_connect($localhost, $username, $password);
mysql_select_db($dbname, $con);