2016-05-10 3 views
0

Eine Analogie zu meinem Problem, So habe ich eine Tabelle namens sample_table, es hat 1 Feld namens Eingabe. Die sample_table hat 2 Datensätze, "A" und "B". Mein Programm kann eines der beiden aktualisieren, und es gibt eine Validierung. Wenn ich "B" zu "A" ändere, wird es ungültig, (A ist bereits vorhanden). Gleiches bei Änderung von "A" nach "B" (B ist bereits vorhanden). Diese Validierung funktioniert, weil ich vor der Aktualisierungsabfrage eine Auswahlabfrage mache und überprüfe, ob der Wert bereits existiert, und wenn kein Wert existiert, wird eine Aktualisierung stattfinden. Das Problem ist, wenn ich "B" in Kleinbuchstabe "b" aktualisiere, validiert mein Programm und erkennt, dass B bereits existiert. Wie kann ich B nach b aktualisieren? Das ist es, was ich will.Was ist der richtige Ablauf für mein Programm?

Meine Codes

<?php 

function update() 
{ 

$sup_id = $_POST['flavor_id']; 
$flavor_name = $_POST['flavor_name2']; 
$flavor_name = trim($flavor_name); 

$sql = "update flavor set flavor_name = :flavor_name where id = :sup_id"; 

$stmt = "SELECT * FROM flavor WHERE flavor_name=:flavor_name"; 

try 
{    
$STM2= $conn -> prepare($stmt);           
$STM2->bindparam(":flavor_name", $flavor_name); 
$STM2 -> execute(); 
$row=$STM2->fetch(PDO::FETCH_ASSOC); 

if(strtolower($row['flavor_name'])==strtolower($flavor_name)) 
{ 
echo " <p class=failed> Flavor is already existing </p>"; 
} 
else 
{ 
$STM = $conn -> prepare($sql);          
$STM->bindparam(":sup_id", $sup_id); 
$STM->bindparam(":flavor_name", $flavor_name); 
$STM -> execute(); 
echo " <p class=success> Flavor Updated</p> "; } 
} 
catch(PDOException $e) 
{ 
echo $e->getMessage(); 
} 
} 


?>   
+0

Zeigen Sie Ihren Code. Ich habe eine fundierte Vermutung, was das Problem ist, aber wenn Sie Ihren Code zeigen, können die Leute einen konkreten Rat geben, anstatt zu raten. – Jason

+0

@Leon Flow Bitte erläutern Sie, wenn Sie die beiden Werte i: e Großbuchstaben 'B' und Kleinbuchstaben 'b' in der Tabelle behalten möchten? – Omer

+0

Ich kann einen Datensatz aktualisieren, solange die eingegebenen Daten nicht vorhanden sind. Aber was, wenn ich nur den Fall ändern möchte? –

Antwort

0

MySQL-Abfragen standardmäßig nicht zwischen Groß- und Klein. Sie können eine Spalte so einstellen, dass die Groß-/Kleinschreibung beachtet wird, indem Sie ihre collation so behandeln, dass die Groß- und Kleinschreibung nicht berücksichtigt wird. Aber Sie möchten möglicherweise nicht, dass die Groß-/Kleinschreibung in die Spalte selbst übernommen wird (es sei denn, Sie benötigen diese für Indexierungszwecke, siehe unten).

Um eine Groß- und Kleinschreibung Abfrage auszuführen, müssen Sie das BINARY Schlüsselwort verwenden, um Ihre Spalte in geeigneter Weise zu werfen:

SELECT * FROM sample_table WHERE sample_column = BINARY 'a'; 

Das werden Ihnen nur Spalten geben „a“, nicht „A“ entsprechen.

Sie benötigen diese Art von Logik, wenn Sie dem Benutzer eine intelligente Fehlermeldung anzeigen möchten. Wenn Sie stattdessen nur ein Ausnahmeszenario erstellen oder die Änderung ignorieren möchten, können Sie stattdessen Unique Index für Ihre Spalte erstellen. Für Ihre Situation müssen Sie sicherstellen, dass Groß- und Kleinschreibung beachtet wird. Dann könnten Sie wie folgt vorgehen:

UPDATE [IGNORE] sample_table SET sample_column = 'a'; 

Die IGNORE optional ist, deshalb ist es in Klammern ist. Das wird die Spalte aktualisieren, wenn es den eindeutigen Index nicht verletzt, es wird Ihnen einen MySQL-Fehler geben, wenn es verletzt den eindeutigen Index und Sie IGNORE weglassen, und es wird stillschweigend keine Wirkung haben, wenn es den eindeutigen Index und Sie verletzt Verwenden Sie IGNORE.

Bearbeiten, um den Code zu adressieren, die jetzt in OP Frage ist:

So sind Sie speziell strtolower() auf die Ergebnisse verwendet, die keine Groß- und Kleinschreibung quetscht. Sie könnten diese Anrufe aus dem Code entfernen und die Saiten direkt vergleichen:

//if(strtolower($row['flavor_name'])==strtolower($flavor_name)) 
if($row['flavor_name']==$flavor_name) 

... und das wäre wohl das sein, was Sie suchen, oder Sie können die Abfrage Modifikationen verwenden oben nicht einmal eine passende erhalten Ergebnis, wenn der Fall nicht übereinstimmt.

+0

Jason vielen Dank! Es klappt! Haha! du hast mich zum Weinen gebracht. –

0

Sie können den ASCII-Zeichencode verwenden, um die Buchstaben "A" und "B" und ihre Kleinbuchstaben "a" und "b" darzustellen. Beispiel: Um char 'A' zu speichern, bevor Sie es in die Datenbank einfügen, ändern Sie es in den ASCII-Code, der 65 ist. Wenn Sie möchten, können Sie ihn später wieder in Zeichen ändern.

Verwandte Themen