首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP PDO with IN子句和LIMIT

PHP PDO with IN子句和LIMIT
EN

Stack Overflow用户
提问于 2018-07-22 07:05:02
回答 1查看 363关注 0票数 0

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

按照本教程https://phpdelusions.net/pdo#in,我已经成功地构建了可以正常工作的代码,但并未按预期方式检索数据

代码语言:javascript
复制
        $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);

例如,第一条语句返回[43,42]的数组。然后我将它与53合并,所以我得到了[43,42,53]

以下是此示例中的回显

代码语言:javascript
复制
ID:1 PARAM:42 ID:2 PARAM:41 ID:3 PARAM:53 ID:4 PARAM:0

查询也会像它应该创建的那样创建:

代码语言:javascript
复制
SELECT * FROM user_tweets WHERE user_id IN (?,?,?) ORDER BY tweet_date DESC LIMIT 20 OFFSET ?

我的代码出了什么问题?我很困惑,因为一切都应该很好(当我像下面这样用已经设置好的变量调用我的数据库时,它确实返回了几行,所以它应该也适用于PDO,但什么也不返回)

代码语言:javascript
复制
SELECT * FROM user_tweets WHERE user_id IN (42,41,53) ORDER BY tweet_date DESC LIMIT 20 OFFSET 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-22 09:23:27

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51460762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档