我想将这些语句变成一个函数,因为您看到了它的重复性。您如何使用功能使它更有效?非常感谢提示!
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);
}
基于类别排序(新闻,样式,内饰,特色)。
有几种方法可以使这只猫皮肤,但是我使用的功能可以从中运行所有查询。这是该功能,以及连接:
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
不是必需的,但我确实捕获了其他pruposes的错误消息,所以这是一种方便的方法。
然后,每当我需要查询时,我都可以编写查询并随请求发送参数:
$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');
解析返回的结果,您正在途中。