2014-10-12 57 views
0

我有一些代碼,我希望它只顯示列中存在特定字符串的行。我有一個名爲「標籤」的專欄,其中標籤的格式爲「tag1,tag2」等。我想要鏈接,以便人們只能顯示帶有特定標籤的產品。這是我遇到問題的地方。我無法讓它顯示具有特定標籤的行,它顯示了每一行。試圖顯示包含字符串的行時顯示的所有行

<?php 
try { 
    //open the database 
    $db = new PDO('sqlite:prodDb.sqlite'); 
    $tag = $_POST['tag']; 
    if (isset($tag)) { 
     $result = $db->query('SELECT * FROM Products WHERE instr(Tags, $tag) > 0'); 
    } else { 
     $result = $db->query('SELECT * FROM Products '); 
    } 

    //now output the data to a simple html table... 
    $result = $db->query('SELECT * FROM Products'); 
    foreach ($result as $row) { 
     print "" . $row['Id'] . "<br />"; 
     print "" . $row['Name'] . "<br />"; 
     $tags = explode(', ', $row['Tags']); 
     foreach ($tags as $tag) { 
      print "Tag: " . $tag . "<br />"; 
     } 
     print "" . $row['Link'] . "<br />"; 
     print "" . $row['Screenshot'] . "<br />"; 
     print "" . $row['Download'] . "<br />"; 
    } 


    // close the database connection 
    $db = NULL; 
} 
catch (PDOException $e) { 
    print 'Exception : ' . $e->getMessage(); 
} 
?> 

任何想法,我哪裏出錯了?

+0

我看不出查詢如何工作。你需要在查詢中引用'$ tag'。但是最好使用預先準備好的查詢和'bindParam',而不是插入一個變量。 – Barmar 2014-10-12 06:50:57

回答

1

擺脫這裏$db->query線:

//now output the data to a simple html table... 
$result = $db->query('SELECT * FROM Products'); 

你丟棄來自匹配標籤的查詢的結果,並使用該查詢返回所有產品。

在帶有標記的查詢中,您有一個語法錯誤,因爲您需要圍繞字符串引號。這將是更好地使用準備好的查詢:

$stmt = $db->prepare('SELECT * FROM Products WHERE INSTR(Tags, :tag)'); 
$stmt->execute(array(':tag' => $tag)); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

另外,如果你有一列所有的標籤,你有一個貧窮的表設計。您應該通過將標籤移動到單獨的表中來標準化數據,每個產品每個標籤一行。

+0

謝謝。我沒有意識到我把它留下了,但它並沒有幫助。不知何故,它仍然無法正常工作。現在,當我在url中使用?tag = tagname時,它什麼也不顯示。我認爲查詢有問題。我想我需要嘗試其他查詢。 – 2014-10-12 08:24:02

+0

我已將修復程序添加到搜索標記的查詢中 – Barmar 2014-10-12 08:29:33

+0

即可。謝謝。我已經遠離數據庫太久了。需要更多地使用它們才能使事情順利進行。 當超級累贅的時候,編寫代碼也許不是一個好主意。現在做分頁,並看看我需要它的輸出。再次感謝。 – 2014-10-12 08:38:30

1

它可能不工作,因爲在這裏:

//now output the data to a simple html table... 
$result = $db->query('SELECT * FROM Products'); 

你只是選擇所有產品,而忽略之前的查詢/過濾器。

相關問題