2017-06-25 3 views
1

Ich habe ein Problem mit meinem MySQL-Code in PHP. Ich habe mein eigenes Such-Plugin für die Joomla-Seite erstellt. Dieses Plugin sucht einen Wert von der Sucheingabe. Sie können eine Firmenregistrierungsnummer oder einen Firmennamen in das Suchfeld eingeben. Die Erweiterung sollte in zwei Spalten in einer Tabelle aussehen.Suche einen Wert in zwei Spalten in MySQL

SQL-Tabelle "registered_companies"

id | regnumber | name | col4 | col5 | col6 etc 
01 | 17333032 | company1 | bla | bla | bla 
02 | 36302465 | company2 | bla | bla | bla 
03 | 17311161 | company3 | bla | bla | bla 
04 | 651664 | company4 | bla | bla | bla 
05 | 17318599 | company5 | bla | bla | bla 

in meinem PHP-Code I

$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query = "SELECT * 
      FROM registered_companies 
      WHERE ".$searchInput." IN(regnumber, name)"; 

Mit diesem Code SQL wählen haben (ich versuchte mehrere Varianten) es funktioniert nur, wenn ich versuche, Nummer zu finden (Registrierungsnummer). Wenn ich eine Textzeichenfolge wie "Firma1" eingeben, gibt SQL Fehler 1054 Unbekannte Spalte 'Firma1' in 'WHERE-Klausel' zurück.

Ich versuche zu verwenden WHERE regnumber LIKE ".$searchInput; Das ist in Ordnung, aber natürlich sucht der Befehl nur eine Spalte, und alle meine mehrere LIKE und OR-Befehle endete als Fehler.

Was mache ich falsch? Wie gebe ich einen SQL-Befehl ein, um das zu tun, was ich will?

thx für die Hilfe

+1

WHERE regnumber LIKE 'stringTOSearch' OR Name LIKE ‚stringTOSearch'' –

+0

das funktioniert, thx. Ich füge diesen [code] WHERE regnumber LIKE 'stringTOSearch' ODER den Namen LIKE '% stringTOSearch%' hinzu [/ code] –

Antwort

0

Zuerst% auf Ihre Suchzeichenfolge hinzufügen müssen ..

$searchInput = "%".$searchInput."%"; 

Dann bereiten, binden, führen und

$query = "SELECT * FROM registered_companies WHERE regnumber LIKE :searchInput OR name LIKE :searchInput"; 
$dbResult = $db->prepare($sql); 
$dbResult->bindValue(':searchInput', $searchInput, PDO::PARAM_STR); 
$dbResult->execute(); 

while($line = $dbResult->fetch(PDO::FETCH_ASSOC)){ 
    //... do what you need ... 
    // $name = $line['name']; 
} 
+1

Ihre Abfrage enthält einen Syntaxfehler. –

+0

Du hast Recht, versuche den bearbeiteten .. –

0

Sie Ihre SELECT drehen holen sollte Erklärung zu:

$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query = "SELECT * 
      FROM registered_companies 
      WHERE regnumber = ".$searchInput." OR name LIKE '".$searchInput."%'"; 

Dies scheint zu funktionieren, aber hüte dich vor SQL-Injection. Sie sollten stattdessen mit vorbereiteten Anweisungen arbeiten. Sehen Sie sich die PHP-Dokumente für die vorbereiteten Anweisungen an. http://php.net/manual/de/mysqli.prepare.php

Je nach comaparision für die Spalten regnumber und name Sie die = und LIKE ändern.

Verwandte Themen