2014-12-02 53 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的影响。