可以这样做吗?
假设我有一张桌子: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应该检查任一表中的checking
和box
的两种组合。
有人可以告诉我我在这里做错了什么吗?
谢谢
看起来您正在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();
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];
在您的查询中,您似乎将id_1作为参数传递给id_2并将id_2参数作为id_1,因此根据您的查询,只有一种id_1 = checking
和id_2 = box
的组合,所以你得到的输出计数为 1而不是这个以避免参数混淆使用
$sql -> execute(array(':id1' => $id_1, ':id2' => $id_2, ':idusers' => $id_users));