Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何利用这些sql语句生成函数,这样就不必重复太多次?_Php_Mysql_Function - Fatal编程技术网

Php 如何利用这些sql语句生成函数,这样就不必重复太多次?

Php 如何利用这些sql语句生成函数,这样就不必重复太多次?,php,mysql,function,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 ->

我想把这些语句变成一个函数,正如你所看到的,它是重复的。如何使用函数来提高效率?非常感谢你的提示

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);

}

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

有两种方法可以对这只猫进行蒙皮,但我使用了一个函数,可以使用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
是不必要的,但我确实为其他Pruspose捕获了错误消息,因此这是一种方便的方法

然后,在任何需要查询的时候,我都可以编写查询并随请求发送参数:

$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');
或:


解析返回的结果,您就可以开始了。

对于我的类,这些查询中的每一行都只有一行
$statement=$db->all(“QUERY”)
我们总是很乐意帮助和支持新的编码人员,但您需要首先帮助自己。:-)如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读一个好问题。一定要阅读。如果答案解决了你的问题,请考虑接受答案。下面是如何返回此处并对勾号/复选标记执行相同操作,直到其变为绿色。这将通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,并可能希望发布(更多)答案。您将获得积分,并鼓励其他人帮助您。欢迎来到Stack!
$interior = getBlogPosts('interior');