2013-12-21 41 views
0

我想創建一個搜索,反正我的網站是:PHP搜索抓取其中字段存在數據

mysite.com/?p=search&t=[SEARCH VARIABLE] 

所以對於我來說,如果我的網址,我希望通過我的表中搜索帖子,並給我結果[SEARCH VARIABLE]存在表中。主要是我想要檢查這些列:標題,內容和作者。如果在那裏有任何[搜索變量],我希望它顯示出來。

嘗試工作[只有1列],但沒有給我所有的結果。

<?php 
if (isset($_GET['t'])) 
{ 
    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like :t'); 
    echo ' <h1>Search results for: '.$_GET['t'].'</h1> '; 
    if (!$stmt->execute(array(':t' => $_GET['t']))) 
    { 
     exit('Could not exec query with param: '.$_GET['t']); 
    } 

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo '<font size="4pt">'.$row["title"].'</font><br> 
         '; 

    } 
    } 
?> 

我的嘗試與第一個相同,但檢查內容字段。也不起作用。

<?php 
    if (isset($_GET['t'])) 
    { 
     $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like :t AND `content` like :t;'); 
     echo ' <h1>Search results for: '.$_GET['t'].'</h1> '; 
     if (!$stmt->execute(array(':t' => $_GET['t']))) 
     { 
      exit('Could not exec query with param: '.$_GET['t']); 
     } 

     while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
      echo '<font size="4pt">'.$row["title"].'</font><br> 
          '; 
     } 
    } 
    ?> 

與第一個,它只顯示一個字段與它的標題。但我希望它能展示任何與它中的單詞。例如,如果你搜索「哎」,並有‘哎那裏有蘋果’,我希望它表明,哎那裏有蘋果

編輯:。

<?php 
if (isset($_GET['t'])) 
{ 

    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like %:t%'); 

    echo ' <h1>Search results for: '.$_GET['t'].'</h1> '; 

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo '<font size="4pt">'.$row["title"].'</font><br> 
         '; 

          } 
          } 

        ?> 

仍然需要幫助

+0

告訴我們你的錯誤 –

+0

@яша沒有錯誤,它只是沒有顯示。與第一個,它只顯示一個字段的標題。但我希望它能展示任何與它中的單詞。例如,如果你搜索「嘿」,並有「嘿theres蘋果」,我希望它表明,嘿theres蘋果。 – user3124460

+0

@JakeGould不,我沒有看到答案。 – user3124460

回答

0

問題是你是不是把LIKE通配符(%)周圍的搜索詞。沒有通配符,查詢將查找在您的PARAMS字面而言這是不是真的,你想使用LIKE什麼。

所以像這樣的語句:

$stmt->execute(array(':t' => $_GET['t']) 

會是這個:

$stmt->execute(array(':t' => '"%'.$_GET['t'].'%"') 

編輯也許做這種方式會更好。留下你的代碼爲原來的問題,忽略上面的變化和調整你的語句是這樣的:

$stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like %:t%'); 

也爲您的聯合聲明中做類似的改變,也許改變AND一個OR

$stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like %:t% OR `content` like %:t%;'); 

但不知何故,您需要使用這些通配符才能獲得問題所暗示的結果。

+0

我不敢這麼做。 – user3124460

+0

看到我的新編輯。但問題是缺少通配符。 – JakeGould