SQL SELECT für Suche mit drei Begriffen in sechs Spalten

rernanded

Erfahrenes Mitglied
Hi
ich brauche ein SQL SELECT ... WHERE ??? um mit drei möglichen Begriffen(Form besteht aus drei input - es muß für submit nur das erste input mind. ausgefüllt sein) in fünf Spalten einer DB-Tabelle zu suchen. Spalte sechs muß einen bestimmten Wert (LIKE '%bestimmter_wert%') enthalten damit das Suchergebnis angezeigt wird.


MONI

PHP:
include_once('db_verbindung.php');

    $search_1 = explode(" ",$_POST["search_1"]);
    $search_2 = explode(" ",$_POST["search_2"]);
    $search_3 = explode(" ",$_POST["search_3"]);

    try {
        $pdo = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $username, $password);
    }
    catch(PDOException $e) {
        echo $e->getMessage();
    }
$count = count($search_1);
$count = count($search_2);
$count = count($search_3);
    for ($i=0; $i < $count; $i++) {

  
        $stmt = $pdo->prepare("SELECT * FROM datenbank-tabelle

WHERE ???

        ORDER BY id DESC");

        $stmt->bindValue(':search_1', '%' .$search_1[$i]. '%', PDO::PARAM_STR);
        $stmt->bindValue(':search_2', '%' .$search_2[$i]. '%', PDO::PARAM_STR);
        $stmt->bindValue(':search_3', '%' .$search_3[$i]. '%', PDO::PARAM_STR);
        $stmt->execute();
  
foreach ($result as $row) {
            echo " ... ";
...
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
um mit drei möglichen Begriffen(Form besteht aus drei input - es muß für submit nur das erste input mind. ausgefüllt sein) in fünf Spalten einer DB-Tabelle zu suchen.
Mir ist noch nicht ganz klar, wie Du das meinst: Soll der Suchbegriff jeweils in mindestens einer der fünf Spalten vorhanden sein? Also verodert in etwa so:
spalte1 LIKE %:search_1% OR spalte2 LIKE %:search_1% OR spalte3 LIKE %:search_1% OR usw.
 

ComFreek

Mod | @comfreek
Moderator
spalte1 LIKE %:search_1% OR spalte2 LIKE %:search_1% OR spalte3 LIKE %:search_1% OR usw.
Beachte, dass PDO und MySQLi (soweit ich weiß) kein Escaping für Wildcard ausführen. Sprich: wenn in den Nutzerdaten % steht, dann wird das auch als Wildcard im SQL Query interpretiert. Das kann zu DoS-Angriffen führen, wenn man sowas wie "%a%b%c%d..." eingibt.
 

rernanded

Erfahrenes Mitglied
@Sempervivum, @ComFreek - Danke Euch, so klappts.
Habe es so umgesetzt:
(spalte1 LIKE %:search_1% OR spalte2 LIKE %:search_1% OR spalte3 LIKE %:search_1%)
AND
(spalte1 LIKE %:search_2% OR spalte2 LIKE %:search_2% OR spalte3 LIKE %:search_2%)
AND
usw.

MONI