Heim > Datenbank > MySQL-Tutorial > Wie parametrisiert man SQL-Abfragen richtig mit LIKE- und IN-Klauseln?

Wie parametrisiert man SQL-Abfragen richtig mit LIKE- und IN-Klauseln?

Mary-Kate Olsen
Freigeben: 2024-12-30 07:00:11
Original
348 Leute haben es durchsucht

How to Properly Parameterize SQL Queries with LIKE and IN Clauses?

Parametrierte Abfragen mit LIKE- und IN-Bedingungen

Ein häufiges Hindernis bei parametrisierten Abfragen ist die Handhabung komplexer Bedingungen mit IN- und LIKE-Klauseln. In solchen Szenarien ist es wichtig sicherzustellen, dass die richtige Syntax verwendet wird, um sowohl Parametrisierung als auch Effektivität zu erreichen.

Stellen Sie sich das folgende Szenario vor:

SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID IN (@categoryids) 
      OR  name LIKE '%@name%'
", 
   conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.Int);
comm.Parameters["@name"].Value = Name;
Nach dem Login kopieren

Hier besteht das Ziel darin, eine Abfrage zu erstellen das Produkte basierend auf einer durch Kommas getrennten Liste von Kategorie-IDs (CategoryIDs) und einer Zeichenfolge (Name) abruft, die Sonderzeichen enthalten kann. Der obige Code funktioniert jedoch nicht ordnungsgemäß, weil:

  • CategoryIDs fälschlicherweise sowohl SqlDbType.Int als auch SqlDbType.String zugewiesen ist.
  • Name ist SqlDbType.Int zugewiesen falsch für eine Zeichenfolge.
  • Sonderzeichen im Namen werden nicht behandelt richtig.

Die richtige Syntax erfordert einen mehrstufigen Ansatz:

  1. Einzelne Parameternamen erstellen: Erstellen Sie eine Liste von Parameternamen für jede Kategorie ID, z. B. @p0, @p1, @pN-1.
  2. Parameter hinzufügen zu Befehl: Durchlaufen Sie die Kategorie-IDs, erstellen und fügen Sie für jede einen Parameter unter Verwendung des entsprechenden Parameternamens hinzu.
  3. Fuzzy-Match für Namen erstellen: Verketten Sie % um den Namensparameter in die Abfragezeichenfolge, um die Fuzzy-Suche zu aktivieren.

Der folgende Code demonstriert die Überarbeitung Ansatz:

string Name = "someone";
int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617,
                                1618, 1619, 1620, 1951, 1952,
                                1953, 1954, 1955, 1972, 2022 };

SqlCommand comm = conn.CreateCommand();

string[] parameters = new string[categoryIDs.Length];
for(int i=0;i<categoryIDs.Length;i++)
{
   parameters[i] = "@p"+i;
   comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]);
}
comm.Parameters.AddWithValue("@name",$"%{Name}%");
comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN (";
comm.CommandText += string.Join(",", parameters) + ")";
comm.CommandText += " OR name LIKE @name";
Nach dem Login kopieren

Dieser Code erzeugt eine vollständig parametrisierte Abfrage, die die Anforderungen sowohl der IN- als auch der LIKE-Bedingungen erfüllt.

Das obige ist der detaillierte Inhalt vonWie parametrisiert man SQL-Abfragen richtig mit LIKE- und IN-Klauseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage