2013-06-04 63 views
1

我想索引和排列已查找的搜索項的列表。我有一個單獨的表在我的數據庫具有以下信息php,mysqli插入和搜索基於關閉一個值

_ID int Auto_Increment, 
TERM varchar(255), 
RANK int 

的代碼我使用來獲取和顯示結果如下:

<?php 
$q = $_GET['q']; 

$DB_NAME = 'code_storage'; 
$DB_HOST = 'localhost'; 
$DB_USER = 'user'; 
$DB_PASS = 'pass'; 


try { 
    $dsn = "mysql:host=$DB_HOST;dbname=$DB_NAME"; 
    $db = new PDO($dsn, $DB_USER, $DB_PASS); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $query = "SELECT * FROM `snippets` WHERE `CODE_NAME` LIKE :name1 OR `CODE_DESC` LIKE :name2 OR `CODE_TAGS` LIKE :name3 OR `CODE_USAGE` LIKE :name4"; 
    $prep = $db->prepare($query); 
    $qpattern = "%" . $q . "%"; 
    $prep->execute(array(":name1" => $qpattern, ":name2" => $qpattern, ":name3" => $qpattern, ":name4" => $qpattern)); 
    echo '<div class="row">'; 
    echo '<div class="panel">'; 
     printf("Your search for <b>$q</b> returned %d records.\n", $prep->rowCount()); 
    echo '</div>'; 
    echo '</div>'; 

    while ($row = $prep->fetch()) { 
    echo ' <div class="row">' . "\n"; 
    echo '  <div class="large-12 columns">' . "\n"; 
    echo '    <b><a href="results.php?id=' . $row['_ID'] . '">' . $row['CODE_NAME'] . '</a></b><br/><br/>' . "\n"; 
    echo '  </div>' . "\n"; 
    echo ' </div>' . '<br/>' . "\n"; 
    $db = null; 
} 

} 
catch (PDOException $e) { 
    echo '<div class="row">'; 
    echo '<div class="panel">'; 
     echo 'Connection failed: ' . $e->getMessage(); 
    echo '</div>'; 
    echo '</div>'; 

} 
?> 

我有1主要問題

  1. 如何將從$ q中抽取的搜索詞插入搜索表中

編輯:我想它我只是$查詢下,加入這個,現在它的工作原理

$search = "INSERT INTO `search` (`TERM`, `RANK`) VALUES (:search, 1) ON DUPLICATE KEY UPDATE `RANK` = `RANK` + 1"; 
$sprep =$db->prepare($search); 
$sprep->execute(array(":search" => $q)); 
+0

我不明白這個問題。我沒有看到任何引用「流行」表的代碼。您需要發佈導致您問題的代碼,而不是可用的代碼。 – Barmar

+0

您的代碼可用於SQL注入。你使用的是mysqli,那你爲什麼不使用準備好的查詢呢? – Barmar

+0

@ Barmar從來沒有嘗試過使用準備好的查詢,仍然學習sql和php會喜歡這樣做,但我想先讓它工作,然後我將學習如何進行準備好的語句 – ondrovic

回答

1

我想從你的if語句分離出查詢,以便可以更好地調試。相反的:

if(!$result = $mysqli->query($sql)){ 

我會做:

$result = $mysqli->query($sql); 
if($result === false){ 

然後我會用一個查詢要麼插入關鍵字或更新關鍵字排名在流行表。看到這篇文章:mysql if exists。我會做這樣的事情:

INSERT INTO `popular` (keyword, rank) VALUES ('new keyword', 1) 
ON DUPLICATE KEY UPDATE `rank` = `rank` + 1; 

假設您的關鍵字作爲主鍵的一部分,那麼這將插入它,如果它不存在,並提高等級,如果它。