在PDO的相同mysql语句中使用'AND'和'OR'

时间:2012-04-17 04:16:17

标签: php mysql sql pdo

是否可以这样做?

假设我有一张桌子:data

$id_1 = "checking";
$id_2 = "box";
$id_users = 1;

id    id_1        id_2         id_users
1     checking    box             1
2     checking    circle          1
3     box         checking        1
4     box         checking        1

$sql = $db->prepare("SELECT COUNT(*) FROM data WHERE ((id_1 = ? AND id_2= ?) OR (id_1 = ? AND id_2 = ?)) AND id_users = ?");
$sql -> execute(array($id_1, $id_2, $id_2, $id_1, $id_users));
echo count($sql);

有了这个,我只得到1的输出。从技术上讲,我应该得到3的输出,对吗?因为检查和盒子有3种可能性。

SQL应该检查任一表中checkingbox的两种组合。

有人能告诉我这里的错误吗?

由于

3 个答案:

答案 0 :(得分:3)

看起来你是count()已计算的SQL COUNT ed行数。
echo $sql怎么样?

$sql = $db->prepare("SELECT COUNT(*) FROM data WHERE ((id_1 = ? AND id_2= ?) OR (id_1 = ? AND id_2)) AND id_users = ?");
$sql->execute(array($id_1, $id_2, $id_2, $id_1, $id_users));
echo $sql->fetch();

答案 1 :(得分:2)

MДΓΓБДLL说的没问题,但您也可以使用命名参数:

$sql = $db->prepare("SELECT COUNT(*) FROM data WHERE ((id_1 = :id1 AND id_2= :id2) OR (id_1 = :id2 AND id_2 = :id1)) AND id_users = :idusers");
$sql -> execute(array(':id1' => $id_1, ':id2' => $id_2, ':idusers' => $id_users));

您需要获取结果

$result = $sql->fetch();
echo $result[0];

答案 2 :(得分:1)

在您的查询中,您似乎将id_1作为参数传递给id_2,将id_2参数作为id_1传递,因此根据您的查询,只有id_1 = checkingid_2 = box的一种组合, 所以输出计数为1 而不是这样以避免参数混淆使用

$sql -> execute(array(':id1' => $id_1, ':id2' => $id_2, ':idusers' => $id_users));