2017-09-15 44 views
0

我做一個簡單的搜索引擎(與PDO)和MySQL的,它的目標是尋找產品中的股票。
TABLE phone具有COLUMN snowden其是TINYINT(含有01)。我希望能夠得到結果,如果phone.snowdentrue用戶的輸入是'snowden'


這裏是我的查詢短版::search_0是用戶的輸入這是PDO一個準備好的查詢)SQL - 選擇列= TRUE AND:輸入=`在<strong>PHP</strong> string`

SELECT * FROM phone WHERE phone.snowden = 1 AND :search_0 = `snowden` 


當然真正的查詢實際上是更長的(加盟多個和搜索到許多),但除此之外,一切正常。
當我嘗試搜索'snowden'我沒有得到任何結果(指的關鍵字沒有任何列的「斯諾登」的情況下不能正常工作被發現)。

  • 難道我錯過一些關於語法
  • 如何以我試過的方式實現這個查詢?
  • 如何通過與列名稱的比較來實現此目的(如果這是一種更好的方法)?

編輯:全碼

下面是完整的代碼,我使用:

$keywords = explode(" ", $_POST['query']); 
$query = "SELECT phone.id, phone.imei, phone.model, phone.color, phone.capacity, phone.grade, phone.sourcing, phone.entry, phone.canal, phone.sale, phone.state, phone.snowden FROM phone LEFT JOIN capacity ON (phone.capacity = capacity.id) LEFT JOIN color ON (capacity.color = color.id) LEFT JOIN model ON (color.model = model.id) LEFT JOIN grade ON (phone.grade = grade.id) WHERE "; 
$query_array = array(); 
for ($i = 0; $i < count($keywords); $i += 1) { 
    $query .= " (phone.imei LIKE :search_" . $i; 
    $query .= " OR phone.sourcing LIKE :search_" . $i; 
    $query .= " OR phone.canal LIKE :search_" . $i; 
    $query .= " OR phone.entry LIKE :search_" . $i; 
    $query .= " OR phone.sale LIKE :search_" . $i; 
    $query .= " OR phone.state LIKE :search_" . $i; 
    $query .= " OR (phone.snowden = 1 AND ':search_" . $i . "' = `snowden`)"; 
    $query .= " OR model.name LIKE :search_" . $i; 
    $query .= " OR color.name LIKE :search_" . $i; 
    $query .= " OR capacity.amount LIKE :search_" . $i; 
    $query .= " OR grade.name LIKE :search_" . $i; 
    if ($i != (count($keywords) - 1)) { 
     $query .= ") AND "; 
    } else { 
     $query .= ") "; 
    } 
    if (strtolower($keywords[$i]) == 'snowden') { 
     $query_array['search_' . $i] = $keywords[$i]; 
    } else { 
     $query_array['search_' . $i] = "%" . $keywords[$i] . "%"; 
    } 
} 
$query .= "ORDER BY phone.id DESC"; 
$results = $stock->prepare($query); 
$results->execute($query_array); 
+0

是search_0是列的名字? – Nidhi257

+1

[PHP PDO語句是否可以接受表名或列名作爲參數?](https://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-or-column-名稱作爲參數) –

+0

@ Nidhi257不,這是一個準備好的PDO查詢的值,這是用戶輸入(我會精確的) – AymDev

回答

1

取代你行

$query .= " OR (phone.snowden = 1 AND ':search_" . $i . "' = `snowden`)"; 

$query .= " OR (phone.snowden = 1 AND 'snowden'= :search_" . $i)";