【问题标题】:return pdo result from outisde anonymous function inside class从类内的外部匿名函数返回 pdo 结果
【发布时间】:2014-12-01 23:58:09
【问题描述】:

我创建了一个匿名函数来获取一些 sql 结果,所以我不必每次都编写它:

function select($sql){
    global $connexion; // config connection 
    $query = $connexion->prepare($sql);
    $query->execute();
    return $query->setFetchMode(PDO::FETCH_OBJ);
}

我创建了一个类来从我的数据库中获取元信息:

class PageInfo {
    public function get_meta($page_name){
            $sql = "SELECT description, keywords FROM pages WHERE titre='$page_name'";
            select($sql); //call the first function
            global $query;
            while( $results = $query->fetch() ){
                echo "test";
            }
    }
}

然后我这样称呼这个类:

$PageInfo = new PageInfo();  
$PageInfo->get_meta('homepage');

不明白为什么我会收到这个致命错误:

Fatal error: Call to a member function fetch() on a non-object

感谢您的宝贵帮助

【问题讨论】:

  • 这让我的眼睛受伤了。如果您要在任何地方使用全局,您还不如通过静态函数或单例访问您的数据库。至少这是可读的

标签: php function pdo return


【解决方案1】:

您从未在您的 select() 函数中执行过 global $query。这意味着$query 中有一个局部变量,一旦函数返回,您的数据库结果将被丢弃/销毁。

另外,使用全局变量实在是太可怕了。特别是为此。您将自己限制在任何给定时间进行中的 SINGLE 查询。为什么不返回实际结果呢?

function query($sql) {
    $result = $connextion->execute($sql);
    return $result;
}

$results = query($sql);
while($row = $results->fetch()) {
    ...
}

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多