2017-09-15 46 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)";