簡體   English   中英

SQL-SELECT WHERE列= TRUE AND:input =`string'

[英]SQL - SELECT WHERE column = TRUE AND :input = `string`

我正在用PHP (帶有PDO )和MySQL創建一個簡單的搜索引擎,其目標是在庫存中查找產品。
我的TABLE phoneCOLUMN snowdenTINYINT (包含01 )。 如果phone.snowdentrue 並且用戶輸入為'snowden'我希望能夠得到結果。


這是我的查詢的簡短版本:( :search_0是用戶的輸入。這是針對PDO的准備好的查詢)

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


當然,實際查詢實際上更長(連接多個並搜索許多 ),但是除此以外,其他所有方法都有效。
當我嘗試搜索'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);

替換你的線

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM