简体   繁体   中英

Using 'AND' and 'OR' in same mysql statement with PDO

Is it possible to do this?

Lets say I have a table : 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);

With this, I'm getting an output of 1 only. Technically I should be getting an output of 3, correct? Because there are 3 possibilities with checking and box.

The SQL is supposed to check either table for the two combinations of checking and box .

Can someone tell me what I'm doing wrong here?

Thanks

It looks like you're count() ing the already-counted SQL COUNT ed number of rows.
How about just 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();

What MДΓΓ БДLL said is ok, but you could also use named parameters:

$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));

And you need to fetch result

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

在您的查询中,您似乎将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));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM