2012-09-05 50 views
-2

我正在處理多個輸入表單的搜索表單。只插入一個搜索條件時,如果工作正常。但是,當使用兩個時,它不會。我看到這個缺陷,但我不知道如何解決它。我試過循環等,但問題仍然存在。PHP/MySQLI多重搜索[2]

$sql = 'SELECT product_id, product_title FROM product WHERE '; 
$where = array(); 
$values = array(); 
$types = ''; 

if (!empty($_GET['searchText'])) { 
    $where[] = 'product_title = ?'; 
    $values[] = $_GET['searchText']; 
    $types .= 's'; 
} 
if (!empty($_GET['searchCategorySelect'])) { 
    $where[] = 'product_categoryid = ?'; 
    $values[] = $_GET['searchCategorySelect']; 
    $types .= 's'; 
} 

$sql .= implode(' AND ',$where); 
$search_stmt = $mysqli->prepare($sql); 
$values = implode("", $values); 
$search_stmt->bind_param($types, $values); 
$search_stmt->execute(); 
$search_stmt->bind_result($product_id, $product_title); 
etc... 

的bind_param必須獲得PARAMS適當數量的,因爲會有提前超過一個當兩個或多個搜索審覈規定使用..

感謝。

編輯: 這是錯誤信息,我得到: 「在類型定義字符串元素不匹配綁定變量的數數。」

EDIT2:
回聲$ SQL的結果(有兩個標準):
SELECT product_id,product_title FROM product WHERE product_title =? AND product_categoryid =?

迴響在$類型的結果:
SS

哪個是正確的藏漢所以查詢是否按預期運行。

的事情是,$值將是一個字符串,包括:
[searchCondition1] [SearchCondition2]
例如:如果我在類別車輛上沃爾沃搜索回波$值將輸出Volvo2其中圖2是categoryId。

+0

Hacky可以工作:'SELECT product_id,product_title FROM product WHERE(1 =?OR product_title =?)AND(1 =?OR product_categoryid =?)'。將0或1綁定到僞選擇器來打開/關閉它們 –

+0

在我看來,使用'echo'在準備好聲明之後? – hjpotter92

+0

你能回顯$ sql嗎? – FreudianSlip

回答

1
$sql .= implode(' AND ',$where); 
$search_stmt = $mysqli->prepare($sql); 
if (count($values) == 2) 
{ 
    $search_stmt->bind_param($types, $values[0], $values[1]); 
} 
else 
{ 
    $search_stmt->bind_param($types, $values[0]); 
} 
$search_stmt->execute(); 

但是這是硬編碼,它不是一個很好的解決方案。在你的例子中,你調用bind_param時使用$types = 'ss';$values只有1個參數(如果它與$values = 'one,two';一樣,它仍然是1參數無關緊要)

+0

謝謝,這開啓了一些可能。這是將整個網站轉換爲預備報表的最後一部分,所以有點令人沮喪讓它工作。我很感激幫助。 – Markus