web-dev-qa-db-de.com

Es wird versucht zu prüfen, ob in MySQL-Datenbank bereits ein Benutzername existiert PHP

Ich habe mir die vielen anderen Beiträge, die meinem Thema ähnelten, angesehen und ihre Lösungen (soweit ich das beurteilen kann) so genau wie möglich umgesetzt. Bei jeder Ausführung dieses Skripts wird jedoch der Code im else-Block ausgeführt (auch wenn der eingegebene Benutzername bereits vorhanden ist).

Der Tabellenname ist 'Benutzer' und die Spalte, die ich zu suchen versuche, ist 'Benutzername' . Die Eingabe aus meinem Formular wurde in $username eingelesen, und ich habe mit echo überprüft, ob sie richtig eingelesen wurde. $con enthält die Verbindung zum Server.

Irgendwann habe ich auch echo $query (nichts wurde gedruckt) und echo mysql_num_rows($query) (nichts wurde gedruckt) eingefügt.

Hier ist das relevante Segment des Codes. Würde mich wirklich über ein paar Tipps freuen.

$query = mysql_query("SELECT username FROM Users WHERE username=$username", $con);

  if (mysql_num_rows($query) != 0)
  {
      echo "Username already exists";
  }

  else
  {
    ...
  }

BEARBEITEN: Anscheinend sollte ich mysqli für meinen Server verwenden. Auf diese Weise habe ich die num_rows darauf überprüft, indem ich $ query-> num_rows gemacht habe, da es eine Eigenschaft des Objekts war. Danke für all die Hilfe!

9
covfefe

Ändern Sie Ihre Abfrage in "Gefällt mir".

$username = mysql_real_escape_string($username); // escape string before passing it to query.
$query = mysql_query("SELECT username FROM Users WHERE username='".$username."'");

MySQL ist jedoch veraltet. Verwenden Sie stattdessen MySQLi oder PDO

10
Renish Khunt

Versuche dies:

$query = mysql_query("SELECT username FROM Users WHERE username='$username' ")

Fügen Sie nicht $con zur mysql_query()-Funktion hinzu.

Haftungsausschluss: Die Verwendung der Variable username in der an mysql_query übergebenen Zeichenfolge ist, wie oben gezeigt, ein trivialer Angriffsvektor für die SQL-Injektion. Insofern hängt die username von den Parametern der Webanforderung ab (Abfragezeichenfolge, Header, Anforderungshauptteil usw.) oder anders Parameter, die eine bösartige Entität kontrollieren kann.

3

$ query = mysql_query ("SELECT username FROM Benutzer WHERE username = '$ username'")

Verwenden Sie vorbereitete Anweisungen , verwenden Sie nicht mysql, da es veraltet ist.

// check if name is taken already
$stmt = $link->prepare("SELECT username FROM users WHERE username = :username");
$stmt->execute([
    'username' => $username
]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (isset($user) && !empty($user)){
    // Username already taken
}
1
Jack Nicholson