1

为这个问题的新鲜感道歉。我刚刚开始一个项目,我有一组 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;       
}

谢谢。

4

4 回答 4

2

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

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

不要执行多个查询。:)

于 2012-05-15T17:48:10.947 回答
2

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

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

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

因此,只需在循环中构建该 SQL 字符串,然后将 Execute 移动到底部(在循环之外。)

于 2012-05-15T17:48:25.557 回答
2

和其他人一样;)

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

于 2012-05-15T17:53:08.863 回答
1

以下应该工作。使用 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;   
    }
于 2012-05-15T18:02:09.883 回答