使用PDO

时间:2015-04-22 22:17:21

标签: php mysql pdo

您好我想看看是否有人可以帮我解决以下问题。我正在从PDO数据库中选择一些结果,其中SQL查询位于/class/functions.php中的类文件中。问题是我无法在表单中的php文件中显示结果。

这是我在class / functions.php中使用的SQL查询:

class Users {    
public function selecttema() {
        try{
                $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); 
                $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
                $sql = "SELECT * FROM topics";

                $stmt = $con->prepare( $sql );

                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                $stmt->execute();               

             }catch (PDOException $e) {
                 echo $e->getMessage();
                 }

    }}

之后在外部文件上,我尝试使用以下代码显示此查询中的信息:

<?php 
            $select = new Users;
            $select->selecttema();
            while( $row = $stmt->fetch()){ 
            echo '<option value="' . $row['id'] . '">' . $row['topic'] . '</option>';
            } ?>

我收到以下错误:

注意:未定义的变量:第83行的E:\ xampp \ htdocs \ doccms \ add_doc.php中的stmt

致命错误:在第83行的E:\ xampp \ htdocs \ doccms \ add_doc.php中调用null上的成员函数fetch()

欢迎任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

变量$stmt是函数的本地变量。您需要返回值:

public function selecttema() {
    try{
        $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); 
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM topics";

        $stmt = $con->prepare( $sql );

        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        $stmt->execute();               
        return $stmt;
    }catch (PDOException $e) {
        echo $e->getMessage();
        return false;
    }

}

然后在调用者中使用它:

$statement = $select->selecttema();
while ($row = $statement->fetch()) {
    echo '<option value="' . $row['id'] . '">' . $row['topic'] . '</option>';
}