在rowCount中使用OR运算符

时间:2016-04-30 18:08:23

标签: php pdo

我有一个查询,当我运行它时,我使用rowCount检查它是否返回结果。如果是的话,我会回复一些文字。如果没有,我重定向用户 - 这工作正常,直到....我试图检查rowCount是否在同一行代码中返回结果,如下所示:

$id = '1';
$check1 = $stmt = $con->prepare("SELECT * FROM table1 WHERE ID=:id");
$stmt->bindParam(':id', $id);
$stmt->execute();

$check2 = $stmt = $con->prepare("SELECT * FROM table2 WHERE ID=:id");
$stmt->bindParam(':id', $id);
$stmt->execute();

if($check1->rowCount() > 0 || $check2->rowCount() > 0) {
echo 'Hello';
}else{
header('Location: index.php');
exit();
}

我手动进入table1table2并且有结果,但是当我执行上面的脚本时,我被重定向到index.php,因为显然,有没有结果。

我想知道这行代码是否有任何语法错误:

if($check1->rowCount() > 0 || $check2->rowCount() > 0)

2 个答案:

答案 0 :(得分:0)

更好的方法是使用两个标量的COUNT(*)子查询并加在一起。

SELECT (SELECT COUNT(*)
    FROM `table`
    WHERE `ID` = 1
   ) +
   (SELECT COUNT(*)
    FROM  `table1`
    WHERE `ID` = 1
   ) AS Result

如果任何一个表显示结果,结果将> 1所以你可以测试它。

使用PDO常规,未命名的占位符,尽可能使用“延迟”绑定 - 将数据传递到执行中更易于使用&将大大缩短您的代码。注意execute()中传递的参数必须与查询中的参数匹配,因此$ id 必须传递两次。

我更改了你的代码

$id = '1';
$stmt = $con->prepare("SELECT (SELECT COUNT(*)FROM `search`WHERE `ID` = ?)
+ (SELECT COUNT(*) FROM `search1`WHERE `ID` = ?) AS Result");
$stmt->execute(array($id,$id));
if($stmt->fetchColumn() > 0){
echo 'Hello';
}else{
header('Location: index.php');
exit();
}

答案 1 :(得分:-1)

PDOStatement::rowCount() 会返回SELECT查询返回的行数。它用于计算受UPDATEDELETE查询影响的行数。

你应该使用SELECT COUNT(*) FROM table1 WHERE ID=?来获得你想要的东西,正如文档所说(http://php.net/manual/en/pdostatement.rowcount.php