Heim >Backend-Entwicklung >PHP-Tutorial >Wie erstelle ich eine dynamische LIKE-Bedingungs-SELECT-Abfrage in MySQLi mithilfe vorbereiteter Anweisungen?

Wie erstelle ich eine dynamische LIKE-Bedingungs-SELECT-Abfrage in MySQLi mithilfe vorbereiteter Anweisungen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-06 10:48:11524Durchsuche

How to Build a Dynamic LIKE Condition SELECT Query in MySQLi Using Prepared Statements?

Erstellen einer SELECT-Abfrage mit dynamischen LIKE-Bedingungen als von MySQLi vorbereitete Anweisung

Problem

Benutzer können eine variable Anzahl von Suchbegriffen eingeben und a Die entsprechende Abfrage muss dynamisch basierend auf diesen Begriffen erstellt werden. Das Ziel besteht darin, eine vorbereitete Anweisung zu erstellen, die diese dynamische Eingabe berücksichtigt.

Lösung

Erstellen des Abfrageausdrucks:

Verpacken Sie jeden Suchbegriff in einen LIKE-Bedingung mit Platzhaltern für Bindungswerte (%?).

Beispiel:

$construct .= "name LIKE %?%";

Bindungsparameter:

Packen Sie die Datentypen und Eingabewerte in ein Array mit dem Splat-Operator (...).

Beispiel:

$parameters = ['sss', '%Bill%', '%N_d%', '%Dave%'];

Vorbereitung und Ausführung der Erklärung:

Bereiten Sie die Erklärung vor mit der dynamischen WHERE-Klausel und binden Sie die Parameter.

$stmt = $mysqli->prepare('SELECT * FROM info WHERE ' . implode(' OR ', $conditions));
$stmt->bind_param(...$parameters);
$stmt->execute();

Abrufen Ergebnisse:

Führen Sie die Abfrage aus und rufen Sie die Ergebnisse nach Bedarf ab.

$result = $stmt->get_result();
foreach ($result as $row) {
    echo '<div>' . $row['name'] . '</div>\n'; 
}

Beispiel für korrigierten Code:

<?php
$string = "my name";
$search_exploded = explode(" ", $string);
$num = count($search_exploded);

$conditions = [];
$parameters = [''];
foreach (array_unique($search_exploded) as $value) {
    $conditions[] = "name LIKE ?";
    $parameters[0] .= 's';
    $parameters[] = "%{$value}%";
}

$query = "SELECT * FROM info";
if ($conditions) {
    $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions));
    $stmt->bind_param(...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($query);
}
foreach ($result as $row) {
    echo '<div>' . $row['name'] . '</div>\n'; 
}

?>

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine dynamische LIKE-Bedingungs-SELECT-Abfrage in MySQLi mithilfe vorbereiteter Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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