warum istMysql, wo oder WHERE begann mit integer seltsamen Ergebnissen
$query = "SELECT * FROM `users` WHERE `id` = '$search' OR `email` = '$search' LIMIT 1";
`id` = UNSIGNED INTEGER(10), `email` = VARCHAR(255)
, warum die Abfrage so sonderbare Ergebnisse, ich glaube, das Bild selbst erklärt, aber ich brauche etwas Wort zu, so ist es hier, wenn Benutzersuche [email protected] oder irgendetwas anderes ist nicht vorhanden, keine Ergebnisse, aber wenn die Zeichenfolge mit der Nummer beginnt und den PRIMARY KEY durchsucht, wird die Zeichenfolge in Ganzzahl umgewandelt, wenn ich [email protected] suche, die ID 2 return, jede gute Erklärung und warum ist das passiert?
** WARNUNG **: Dies hat einige schwerwiegende [SQL injection Bugs] (http://bobby-tables.com/), weil '$ _GET' Daten innerhalb der Abfrage verwendet wird. Wann immer möglich, verwenden Sie ** vorbereitete Aussagen **. Diese sind ziemlich einfach in [mysqli'] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [PDO] (http://php.net/manual/ en/pdo.prepared-statements.php) wo alle vom Benutzer angegebenen Daten mit einem '?' oder ': name'-Indikator angegeben werden, der später mit' bind_param' oder 'execute' gefüllt wird, je nachdem, welchen du verwendest. ** NIEMALS ** $ _POST', '$ _GET' oder irgendwelche Benutzerdaten direkt in Ihre Anfrage einfügen. – tadman
Im mit PDO, und lassen Sie Benutzer nur Ergebnisse suchen, nie in diesem Fall einfügen, aber nur ich versuche, den Fall zu erklären, so schreibe ich – user259752
Es lenkt von dem, was Sie tun. Wenn möglich, lassen Sie die Platzhalter unverändert. Gute Nachrichten sind, dass diese Passwörter richtig gehashed sind, also haben Sie diesen Teil gesperrt. – tadman