2012-09-04 57 views
0

我一直試圖讓一個PHP/mysqli簡單的搜索和運行,但我似乎無法得到它的工作。我一直在關注我在前面的問題(Link)中找到的一些指示,但它仍然無效。PHP/MySQLI多重搜索

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

if (isset($_GET['searchText']) and $_GET['searchText'] != '') { 
    $where[] = 'WHERE product_title = ?'; 
    $values['titel'] = $_GET['searchText']; 
    $types .= 's'; 
} 

if (isset($_GET['searchCategorySelect']) and $_GET['searchCategorySelect'] != '') { 
    $where[] = 'WHERE product_categoryid = ?'; 
    $values['category'] = $_GET['searchCategorySelect']; 
    $types .= 's'; 
} 

$sql .= implode(' AND ',$where); 
$values = array_unshift($values, $types); 

$search_stmt = $mysqli->prepare($sql); 
$search_stmt->bind_param($values); 
$search_stmt->execute(); 

導致此錯誤消息: 「錯誤的參數計數mysqli_stmt ::在... bind_param()」

一些建議或幫助,將不勝感激。

+0

您也應該檢查你在哪裏設置你的'$ where'變量 - 你包括'WHERE'與他們每個人的;所以如果兩者都設置好了,你的SQL語句最終會有兩個'WHERE'。 – andrewsi

+0

謝謝你告訴我,現在已經改變了。 – Markus

回答

2

mysqli_stmt :: bind_param預計2個參數最低,但你傳遞一個

語法:

bool PDOStatement::bindParam (mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]]) 

參數:參數標識。對於使用名爲 佔位符的預準備語句,這將是名稱形式的參數名稱。對於使用問號佔位符的 準備好的語句,這將是參數的1索引位置 。

變量:要綁定到SQL語句的PHP變量的名稱 參數。

data_type:使用PDO :: PARAM_ * 常量的參數的顯式數據類型。要從存儲過程返回INOUT參數,請使用按位OR運算符來設置 的data_type參數的PDO :: PARAM_INPUT_OUTPUT位。

長度:數據類型的長度。要指示參數是來自存儲過程的OUT參數,則必須明確設置 的長度。

你也可以做這樣的:

$values = array_unshift($values, $types); 
call_user_func_array (array ($search_stmt, 'bind_param'), $values);   
$search_stmte->execute();