2

我对 PDO 相当陌生,但我遇到了一些可能有一个简单答案的东西。

我有一个类别编号数组,我需要在 mysql 数据库中搜索以查找具有匹配类别编号的所有项目。

我知道我已正确连接到数据库,因为我从不同的查询接收类别数组。

$category = Array ( [0] => 3259 [1] => 3617 [2] => 3257 [3] => 3258 [4] => 3450 [5] => 3452 [6] => 3478 [7] => 3479 [8] => 3480 [9] => 3448 [10] => 3449 [11] => 3451 [12] => 3456 [13] => 3454 [14] => 3455 [15] => 3459 [16] => 3460 [17] => 3458 [18] => 3453 [19] => 3461 [20] => 3462 [21] => 3457 [22] => 3463 [23] => 3447 ) 

现在我需要通过项目数据库来检查匹配的类别。每个项目可以有多个类别,每个类别有4位数字。多个类别用 a = 分开

$categoryResults = $conn->prepare('SELECT * FROM items WHERE category like :cats ORDER BY promotions,price ASC');
$categoryResults->execute(array(':cats' => '%'.$category.'%'));
$categoryNumber = $categoryResults->rowCount();

这就是我似乎出错的地方。使用 mysql 请求,我将使用通过数组的循环手动构建它,以获得长 sql 查询:

'Select * From items WHERE category like '%3259%' OR WHERE category LIKE '%3617%'........etc

但我确信这是使用 PDO 的优势之一。只是为了添加它,我需要结果是独一无二的。如果项目 97 属于类别 3259 和类别 3617,我只想得到一次结果。

提前致谢。

4

2 回答 2

0

我发现您正在寻找带有LIKE声明的数字很奇怪。不category只是类别的ID或它是如何存储的吗?如果category是 CSV 列表,我建议您更改它以使用单独的表进行多对多连接。

如果它已经是一个数值,只需使用IN语句

$categoryResults = $conn->prepare('SELECT * FROM items WHERE category IN (:cats) ORDER BY promotions,price ASC');
$categoryResults->execute(array(':cats' => implode(',', $category));
$categoryNumber = $categoryResults->rowCount();

更新或者更好的是,看看这个问题是一样的。

我可以将数组绑定到 IN() 条件吗?

于 2013-01-02T11:09:20.777 回答
-2

这样做

<?php
$categoryId = array(1, 21, 63, 171);
$place_holders = implode(',', categoryId);


$sth = $dbh->prepare("SELECT * FROM items WHERE category in (?) ORDER BY 
                      promotions,price ASC");
$sth->bindParam(1, $place_holders, PDO::PARAM_STR, 12);
$sth->execute($params);

?>
于 2013-01-02T11:11:01.663 回答