【问题标题】:Getting database results from Array of IDs从 ID 数组中获取数据库结果
【发布时间】:2024-05-29 16:50:01
【问题描述】:

对于这个问题的新鲜感表示歉意。我刚刚开始一个项目,我有一组 ID 可以从表中获取某些记录。解决这个问题的最佳方法是什么?

以下是否有效?

public function getWork($slideIDs) {
    $params = array();
    $params = $slideIDs;

    $count = count($params);

    for($i=0;$i<$count;$i++) {
        $STH = $this->_db->prepare("SELECT * 
            FROM slides
            WHERE slideID = :slideID;");

        $STH->execute($params[$i]);
    }

    $result = $STH->fetchAll(PDO::FETCH_ASSOC);

    return $result;       
}

谢谢。

【问题讨论】:

  • 这行不通。您需要在循环中每次执行后存储结果。查看替代方案的答案。

标签: php mysql select multidimensional-array pdo


【解决方案1】:

最好使用 IN 子句只执行一条 SQL 语句

SELECT * FROM slides WHERE slideID IN (1,2,3,4,5, ...) 

因为更少的连接和访问数据库通常会更好地提高性能。

所以只需在你的循环中构建那个 SQL 字符串,然后将 Execute 移动到底部(在你的循环之外)。

【讨论】:

    【解决方案2】:

    调整您的 PHP 以创建具有此格式的单个查询字符串:

    SELECT * 
    FROM slides
    WHERE slideID IN (2,5,11)
    

    不要执行多个查询。 :)

    【讨论】:

      【解决方案3】:

      和其他人一样;)

      使用implode($array, ",") 获取应该进入IN() 语句的部分

      【讨论】:

        【解决方案4】:

        以下应该有效。使用 implode 创建所需的字符串,其中包含用逗号分隔的 ID 以传递给 SQL。

            function getWork($slideIDs) {
            $params = implode(",",$slideIDs);
            $STH = $this->_db->prepare("SELECT * 
                    FROM slides
                    WHERE slideID in ( :slideID );");
        
            $STH->execute($params);
        
            $result = $STH->fetchAll(PDO::FETCH_ASSOC);
        
            return $result;   
            }
        

        【讨论】: