-2

複数の入力フォームを処理する検索フォームに取り組んでいます。1つの検索条件のみが挿入された場合、正常に機能する場合。しかし、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...

2つ以上の検索条件が使用されると、1つ以上のパラメーターが存在するため、bind_paramは適切な数のパラメーターを取得する必要があります。

前もって感謝します。

編集:これは私が受け取るエラーメッセージです:「型定義文字列の要素の数がバインド変数の数と一致しません。」

EDIT2:
echo $ sqlの結果(2つの基準を使用):
SELECT product_id、product_title FROM product WHERE product_title =?AND product_categoryid =?

エコー$typesの結果:
ss

どちらも正しいので、クエリは意図したとおりに機能します。

つまり、$ valuesは1つの文字列になり、次のものが含まれます。
[searchCondition1] [SearchCondition2]
たとえば、カテゴリVehiclesでVolvoを検索すると、echo$valuesはVolvo2を出力します。2はcategoryIdです。

4

1 に答える 1

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';1$valuesつのパラメーターのみであるということです(のようであるかどうかは関係ありませんが$values = 'one,two';、それでも1つのパラメーターです。

于 2012-09-05T13:14:19.600 に答える