PHP/PDO Select from columns multiple conditions
PHP/PDO Select from columns multiple conditions
我正在尝试获取状态为待处理或已接受的给定成员的结果,执行以下操作:
$status1 = "Pending";
$status2 = "Attended";
$query = $conn->prepare('SELECT * FROM members WHERE member_id=:mID AND status=:status1 OR status=:status2');
$query->execute(array(':mID' => $mID,':status1' => $status1, ':status2' => $status2));
if ($query->rowCount() > 0) {
//start to create my table
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
//create variable, loop through and fill the table etc
}
}else{
echo "something";
}
这会显示数据 - 但是,它甚至可以获得不特定于会员 ID (mID) 的结果。也意味着其他成员数据!
我显然遗漏了一些东西,或者我的查询有误但很难找到任何东西..
感谢任何帮助。
您需要查看数据库的运算符优先级。你这样做:
SELECT * FROM members WHERE member_id = :mID AND status = :status1 OR status = :status2;
这最有可能导致:
SELECT * FROM members WHERE (member_id = :mID AND status = :status1) OR status = :status2;
但这不是您想要的,因此您必须像这样显式使用括号:
SELECT * FROM members WHERE member_id = :mID AND (status = :status1 OR status = :status2);
或者,您可以使用 IN
这样就没有 OR
:
SELECT * FROM members WHERE member_id = :mID AND status IN (:status1, :status2);
我正在尝试获取状态为待处理或已接受的给定成员的结果,执行以下操作:
$status1 = "Pending";
$status2 = "Attended";
$query = $conn->prepare('SELECT * FROM members WHERE member_id=:mID AND status=:status1 OR status=:status2');
$query->execute(array(':mID' => $mID,':status1' => $status1, ':status2' => $status2));
if ($query->rowCount() > 0) {
//start to create my table
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
//create variable, loop through and fill the table etc
}
}else{
echo "something";
}
这会显示数据 - 但是,它甚至可以获得不特定于会员 ID (mID) 的结果。也意味着其他成员数据!
我显然遗漏了一些东西,或者我的查询有误但很难找到任何东西..
感谢任何帮助。
您需要查看数据库的运算符优先级。你这样做:
SELECT * FROM members WHERE member_id = :mID AND status = :status1 OR status = :status2;
这最有可能导致:
SELECT * FROM members WHERE (member_id = :mID AND status = :status1) OR status = :status2;
但这不是您想要的,因此您必须像这样显式使用括号:
SELECT * FROM members WHERE member_id = :mID AND (status = :status1 OR status = :status2);
或者,您可以使用 IN
这样就没有 OR
:
SELECT * FROM members WHERE member_id = :mID AND status IN (:status1, :status2);