2014-12-02 29 views
0

我有一個帶有多個搜索欄的表單。其中之一是關鍵字。 在結果頁面中,我想建立一個查詢,允許以任意順序(即「word1」,「word2」,「word3」或「word3」,「word1」,「word2」等)獲取多個單詞。 )。 我知道我應該使用一個數組,我試過了,但是我沒有解決它! 下面我的代碼。以任意順序查詢多個詞PHP + MySQL

謝謝!

<?php 
    $dbcnx = @mysql_connect('xxx', 'xxx', 'xxx'); 
    if (!$dbcnx) { 
    exit('<p>Non posso connettermi al database.</p>'); 
    } 

    if ([email protected]_select_db('xxx')) { 
    exit('<p>Non posso connettermi al database.</p>'); 
    } 

    // The basic SELECT statement 
    $select = 'SELECT DISTINCT id_articolo, titolo, testo_articolo, data_articolo, categoria_id, abstract_articolo, id_categoria, categoria, link_categoria'; 
    $from = ' FROM Articoli, Categoria'; 
    $where = ' WHERE 1=1 AND categoria_id=id_categoria'; 
    $order = ' ORDER BY data_articolo DESC'; 
    $aid = $_POST['aid']; 
    if ($aid != '') { // An author is selected 
    $where .= " AND id_autore='$aid'"; 
    } 
    // HERE I'D LIKE TO OBTAIN A QUERY USING MULTIPLE WORDS IN ANY ORDER 
    $searchtext = $_POST['searchtext']; 
    if ($searchtext != '') { // Some search text was specified 
    $where .= " AND testo_articolo LIKE '%$searchtext%'"; 
    } 

    $results = @mysql_query($select . $from . $where . $order); 
    if (!$results) { 
    echo '</table>'; 
    exit('<p>Error retrieving results from database!<br />'. 
    'Error: ' . mysql_error() . '</p>'); 
    } 
while ($result = mysql_fetch_array($results)) { 
    echo "<tr valign='top'>\n"; 
    $id = $result['id_articolo']; 
    $resulttext = htmlspecialchars($result['testo_articolo']); 
    $titolo = $result['titolo']; 
    $cat = htmlspecialchars($result['categoria']); 
    $link_cat = htmlspecialchars($result['link_categoria']); 
    $abstract = accorcia($result['abstract_articolo']); 
    $data = convertiDataSql($result['data_articolo']); 

    echo "<tr bgcolor=$color><td><a href='aticolo.php?recordID=$id'><strong style='text-transform:uppercase' class='CapitalizeSmall'>$titolo</strong></a><div style='padding-left:8px'><em>$abstract</em></div><span align='center' style='padding-left:8px' class='generale'><strong>Inserito il $data</strong> | Categoria: <a href='$link_cat' class='stile26'>$cat<a/></span><br /><br /></td></tr>\n"; 

} 
?> 

回答

2

你不能用你的查詢構造。您正在建設

... field LIKE '%foo bar baz%' 

將按照該順序搜索字面文本foo bar baz。如果你想

「任何」命令,你必須按摩文字:

... field LIKE '%foo%' AND field LIKE '%bar%' AND field LIKE '%baz%' 

對於這樣的事情,你會更好切換到全文索引和使用match against代替。它專爲這種搜索而設計,其中LIKE '%...%'效率非常低。

另外,您很容易受到sql injection attacks的影響。