带有IN子句和限制的PHP PDO

带有IN子句和限制的PHP PDO,php,mysql,pdo,sql-limit,sql-in,Php,Mysql,Pdo,Sql Limit,Sql In,我正在尝试使用PDO和LIMIT执行带有IN子句的语句 在本教程之后,我成功地构建了正常工作的代码,但并没有像它应该的那样检索数据 $inStmt = DB::prepare("SELECT following_user_id FROM following WHERE user_id=?"); $inStmt->execute([$userId]); $arr = ($inStmt->fetchAll(PDO::FETCH_NUM));

我正在尝试使用PDO和LIMIT执行带有IN子句的语句

在本教程之后,我成功地构建了正常工作的代码,但并没有像它应该的那样检索数据

        $inStmt = DB::prepare("SELECT following_user_id FROM following WHERE user_id=?");
        $inStmt->execute([$userId]);
        $arr = ($inStmt->fetchAll(PDO::FETCH_NUM));
        $array = array();
        foreach ($arr as $element ) {
            $array = array_merge($array, $element);
        }
        $in  = str_repeat('?,', count($array)) . '?';

        $params = array_merge($array,[$userId]);
        $sql = "SELECT * FROM user_tweets WHERE user_id IN ($in) ORDER BY tweet_date DESC LIMIT 20 OFFSET ?";
        $stmt = DB::prepare($sql);  
        for ($x = 0; $x <= count($params) - 1; $x++) {
            $param = $params[$x];
            echo " ID:" .($x+1) . " PARAM:". $param;
            $stmt->bindParam(($x+1),$param);
        } 
        $param = (int)$startFrom;
        echo " ID:" .(count($params)+1) . " PARAM:". $param;
        $stmt->bindParam((count($params)+1),$param,PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
查询还应创建以下内容:

SELECT * FROM user_tweets WHERE user_id IN (?,?,?) ORDER BY tweet_date DESC LIMIT 20 OFFSET ?
我的代码有什么问题?我很困惑,因为一切都应该很好(当我用下面已经设置好的变量调用我的数据库时,它确实会返回几行,所以它也应该使用PDO,但不返回任何内容)

这似乎是一种更简单(且无限快)的方式来做同样的事情:

SELECT t.*
  FROM following f
  JOIN user_tweets t
    ON t.user_id = f.following_user_id
 WHERE f.user_id=?
 ORDER 
    BY t.tweet_date DESC

为什么不直接使用连接呢?
SELECT * FROM user_tweets WHERE user_id IN (42,41,53) ORDER BY tweet_date DESC LIMIT 20 OFFSET 0
SELECT t.*
  FROM following f
  JOIN user_tweets t
    ON t.user_id = f.following_user_id
 WHERE f.user_id=?
 ORDER 
    BY t.tweet_date DESC