如何从这些sql语句中创建一个函数,所以我不必多次重复它们?

时间:2017-12-04 14:20:18

标签: php mysql function

我想将这些语句改为函数,因为你看到它的重复性。如何使用函数提高效率?非常感谢提示!

if (isset ($_GET["news"])){

$statement = $pdo->prepare("SELECT * FROM posts INNER JOIN users ON 
posts.userID = users.id
WHERE category = 'news'");
$statement->execute();
$blog = $statement ->fetchALL(PDO::FETCH_ASSOC);

}

if (isset ($_GET["style"])){

$statement = $pdo->prepare("SELECT * FROM posts INNER JOIN users ON 
posts.userID = users.id
WHERE category = 'style'");
$statement->execute();
$blog = $statement ->fetchALL(PDO::FETCH_ASSOC);

}

if (isset ($_GET["interior"])){

$statement = $pdo->prepare("SELECT * FROM posts INNER JOIN users ON 
posts.userID = users.id
WHERE category = 'interior'");
$statement->execute();
$blog = $statement ->fetchALL(PDO::FETCH_ASSOC);

}

if (isset ($_GET["featured"])){

$statement = $pdo->prepare("SELECT * FROM posts INNER JOIN users ON 
posts.userID = users.id
WHERE category = 'featured'");
$statement->execute();
$blog = $statement ->fetchALL(PDO::FETCH_ASSOC);

}

它基于类别排序(新闻,风格,内饰,特色)。

1 个答案:

答案 0 :(得分:3)

有两种方法可以为这只猫设置皮肤,但是我使用了一个函数,我可以使用PDO运行所有查询。这是该函数以及连接:

function dataQuery($query, $params) {
    // what kind of query is this?
    $queryType = explode(' ', $query);

    // establish database connection
    try {
        $dbh = new PDO(DBL, USER, PASS);
        $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e) {
        echo $e->getMessage();
        $errorCode = $e->getCode();
    }

    // run query
    try {
        $queryResults = $dbh->prepare($query);
        $result = $queryResults->execute($params);
        if($queryResults != null && 'SELECT' == $queryType[0]) {
            // only return results for SELECT queries - the remainder need no output
            $results = $queryResults->fetchAll(PDO::FETCH_ASSOC);
            return $results;
        }

        $queryResults = null; // first of the two steps to properly close
        $dbh = null; // second step to close the connection
        return $result;
    }
    catch(PDOException $e) {
        $errorMsg = $e->getMessage();
        echo $errorMsg;
    }
}

注意:try/catch不是必需的,但我会捕获其他目的的错误消息,因此这是一种方便的方法。

然后,只要我需要查询,我就可以编写查询并使用请求发送参数:

$role = $_POST['role'];
$getRoleID = "SELECT `id` FROM `roles` WHERE `role` = :role;";
$params = array(':role'=>$role);
$result = dataQuery($getRoleID, $params);

但是,您的具体情况稍微一点。您需要为您的博客提供单一功能。将你和我的结合起来可以做到这一点:

function getBlogPosts($type) {

    $getPosts = "SELECT * FROM posts INNER JOIN users ON posts.userID = users.id WHERE category = :category");
    $params = array(':category'=>$type);
    $result = dataQuery($getPosts, $params);
    return $result;
}

现在,要调用该函数,您只需要插入所需的帖子类型:

$featured = getBlogPosts('featured');

或:

$interior = getBlogPosts('interior');

解析返回的结果,你就行了。