我有一个查询,当我运行它时,我使用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();
}
我手动进入table1
和table2
并且有结果,但是当我执行上面的脚本时,我被重定向到index.php,因为显然,有没有结果。
我想知道这行代码是否有任何语法错误:
if($check1->rowCount() > 0 || $check2->rowCount() > 0)
答案 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
查询返回的行数。它用于计算受UPDATE
或DELETE
查询影响的行数。
你应该使用SELECT COUNT(*) FROM table1 WHERE ID=?
来获得你想要的东西,正如文档所说(http://php.net/manual/en/pdostatement.rowcount.php)