-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 必须获得适当数量的参数,因为当使用两个或多个搜索条件时会有多个参数。

提前致谢。

编辑:这是我得到的错误消息:“类型定义字符串中的元素数与..中的绑定变量数不匹配”

EDIT2:
echo $sql 结果(有两个标准):
SELECT product_id, product_title FROM product WHERE product_title = ? AND product_categoryid = ?

echo $types 导致:
ss

这也是正确的,因此查询按预期工作。

问题是 $values 将是一个字符串,其中包含:
[searchCondition1][SearchCondition2]
例如:如果我在 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';and$values只是 1 个参数(不管它是否像$values = 'one,two';,它仍然是 1 个参数。

于 2012-09-05T13:14:19.600 回答