Php 在PDO查询中使用计数和内部联接

Php 在PDO查询中使用计数和内部联接,php,mysql,Php,Mysql,将此SQL语句作为PDO查询编写的最佳方式是什么?我希望它以数字形式返回查询数 SELECT COUNT(*) totalCount FROM ts_room a INNER JOIN ts_roompref b ON a.id = b.room_ID INNER JOIN ts_request c ON b.request_ID = c.roompref_ID WHERE c.day_ID = 1 AN

将此SQL语句作为PDO查询编写的最佳方式是什么?我希望它以数字形式返回查询数

SELECT  COUNT(*) totalCount
FROM    ts_room a
        INNER JOIN ts_roompref b
            ON a.id = b.room_ID
        INNER JOIN ts_request c
            ON b.request_ID = c.roompref_ID
WHERE   c.day_ID = 1 AND c.period_ID = 1
我是这么想的:

$room_ID = $_POST["room"];

$sql = "SELECT  COUNT(*) totalCount
FROM    ts_room a
        INNER JOIN ts_roompref b
            ON a.id = b.:room_ID
        INNER JOIN ts_request c
            ON b.request_ID = c.roompref_ID
WHERE   c.day_ID = 1 AND c.period_ID = 1";

$stm = $pdo->prepare( $sql );
$stm->execute( array( ':room_ID' => $room_ID) );
$rows = $stm->fetchAll();

// echo row count here
$count = $stm->rowCount();

请检查您的查询一次:我已经提出了条件ehich你做错了这将被放在where条款

  SELECT  COUNT(*) totalCount
    FROM    ts_room a
            INNER JOIN ts_roompref b
                 // ON a.id = b.:room_ID
            INNER JOIN ts_request c
                ON b.request_ID = c.roompref_ID
    WHERE   c.day_ID = 1 AND c.period_ID = 1
我猜您的代码将如下所示:

$room\u ID=$\u POST[“room”]


如果要获取总行数,请使用函数

还有一个更正,因为这里使用的是JOIN,所以在ON子句中,不能使用变量值,只能使用列名

$room_ID = $_POST["room"];

$sql = "SELECT  COUNT(*) totalCount
FROM    ts_room a
        INNER JOIN ts_roompref b
            ON a.id = b.room_ID
        INNER JOIN ts_request c
            ON b.request_ID = c.roompref_ID
WHERE   c.day_ID = 1 AND c.period_ID = 1 and b.room_ID=:room_ID";

$stm = $pdo->prepare( $sql );
$stm->execute( array( ':room_ID' => $room_ID) );
$rows = $stm->fetchColumn();

PDO与此有什么关系?查询就是一个查询,不管您使用的是什么数据库库。唯一的区别是如何嵌入外部数据(例如,$_POST值)。@MarcB我不100%确定如何呼出行数从文档开始:Cheers@MarcB,我已经更新了代码来显示这一点。
PDOStatement::rowCount-返回受上一条SQL语句影响的行数
如何获得行数?我只是回显$rows吗?
$room_ID = $_POST["room"];

$sql = "SELECT  COUNT(*) totalCount
FROM    ts_room a
        INNER JOIN ts_roompref b
            ON a.id = b.room_ID
        INNER JOIN ts_request c
            ON b.request_ID = c.roompref_ID
WHERE   c.day_ID = 1 AND c.period_ID = 1 and b.room_ID=:room_ID";

$stm = $pdo->prepare( $sql );
$stm->execute( array( ':room_ID' => $room_ID) );
$rows = $stm->fetchColumn();