2016-07-31 5 views
1

Ich möchte eine eindeutige Wertspalte in meiner Tabelle erstellen und PHP verwenden, um zu überprüfen, ob der Wert bereits in die Tabelle eingefügt wurde oder nicht. Zum Beispiel kann ein Benutzername nicht zweimal verwendet werden. Ich habe versucht, SELECT verwenden, um Wert aus der Datenbank abrufen, aber es funktioniert nicht. Als ich versuchte, den Wert aus der Tabelle wie das Echo:Wie verwendet man PHP, um Doppelungen in der Datenbank zu vermeiden?

echo $conn->query("SELECT DISTINCT Username 
FROM UserDetail;"); 

Dort heißt es: Abfangbare fatale Fehler: Objekt der Klasse MySQLi_Result kann nicht in String umgewandelt wird

+0

Mögliche Duplikat [Wie 'einfügen, wenn nicht vorhanden ist' in MySQL?] (Http://stackoverflow.com/questions/1361340/how-to-insert-if- not-exists-in-mysql) – revo

Antwort

1

Dieses Problem nicht in PHP gelöst werden soll weil es ein Problem mit dem Datenbankdesign ist. Stattdessen möchten Sie Ihre UserDetail Tabelle so ändern, dass die Datenbank jede Abfrage ablehnt, die versucht, ein Duplikat einzufügen. Dies ist die Abfrage, die Sie ausführen:

$sql = 'ALTER TABLE UserDetail ADD UNIQUE INDEX (`Username`)'; 
$result = $conn->query($sql); 

if($result) echo 'Success!'; 
else echo $conn->error; 

Sobald Sie dies erfolgreich getan haben, ist es nicht möglich sein wird, einen doppelten Username Wert in dieser Tabelle eingeben; Die Abfrage wird nicht ausgeführt und erzeugt einen Fehler.

$sql = "INSERT IGNORE INTO UserDetail SET Username='$escaped_new_username'"; 
$result = $conn->query($sql); 

Durch die Art und Weise Ihr Code schlägt fehl, da Sie das Echo sind versuchen:

Jetzt Fehler zu vermeiden, wenn das Skript einen Benutzernamen, der bereits vorhanden einzufügen versucht, Ihre INSERT-Abfrage INSERT-INSERT IGNORE ändern Ergebnis von $conn->query, aber es ist keine Zeichenfolge. Die Schritte zur DB Ergebnisse zeigen, sind:

  1. Führen Sie die Abfrage (Sie haben)
  2. Stellen Sie sicher, dass kein Fehler durch Prüfen, dass das Ergebnis Ergebnisse nicht false
  3. Fetch von fetchfetch_assoc, fetch_array Ausführung oder einige solche Methode auf das Ergebnis
  4. Verwenden Sie oder zeigen Sie, was Sie abgerufen haben.

    Sehen Sie in der Dokumentation des von Ihnen verwendeten DB-Treibers nach. Die häufigsten sind MySQLi und PDO_MySQL