我想将这些语句改为函数,因为你看到它的重复性。如何使用函数提高效率?非常感谢提示!
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);
}
它基于类别排序(新闻,风格,内饰,特色)。
答案 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');
解析返回的结果,你就行了。