PDO从类方法返回$ row

时间:2013-08-04 09:00:56

标签: oop methods pdo

嘿伙计们我正在学习PHP中的OOP。当我尝试在我自己的班级中自定义PDO时,我遇到了一些问题。基本上我已经尝试返回行并在课堂外获取它。不幸的是我不会工作。我收到此错误 “调用非对象上的成员函数fetch()”。 如果可以,请查看并给我一些提示。非常感谢。

$connection = new MySql(DBUSER, DBPASS);
$row = $connection->query("select * from users", "name");
while($row->fetch(PDO::FETCH_ASSOC)){
    echo "<p>". $row["name"] ."</p>";
}

以下是MySql类的外观:

class MySql{
    private $dbc;
    private $user;
    private $pass;

    function __construct($user="root", $pass=""){
    $this->user = $user;
    $this->pass = $pass;    
    try{
       $this->dbc = new PDO("mysql:host=localhost; dbname=DBNAME;charset=utf8", $user, $pass);
        }
    catch(PDOException $e){
       echo $e->getMessage();
       echo "Problem z Połączeniem do MySql sprawdź haslo i uzytkownika";
        }
    }
    public function query($query, $c1=""){
    $mysqlquery = $this->dbc->prepare($query);
    $mysqlquery->execute();
    return $row = $mysqlquery->fetch(PDO::FETCH_ASSOC);
    /* I WANT TO PERFORM COMENTED CODE OUTSIDE THE CLASS
    while($row = $mysqlquery->fetch(PDO::FETCH_ASSOC)){
        if($c1!=""){
        echo "<p>". $row[$c1] ."</p>";
        }
    }
    */
}

1 个答案:

答案 0 :(得分:1)

如果您想要返回$mysqlquery来迭代它,则必须返回$mysqlquery,而不只是返回一行。

这是您的类的更好版本,具有显着改进的错误处理和安全性。但是仍然可怕的可配置性。

class MySql{
    private $dbc;

    function __construct($user="root", $pass=""){
        $dsn = "mysql:host=localhost; dbname=DBNAME;charset=utf8";
        $opt = array(
           PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
           PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        );
       $this->dbc = new PDO($dsn, $user, $pass, $opt);
    }
    public function query($query, $data = array()){
        $stm = $this->dbc->prepare($query);
        $stm->execute($data);
        return $stm;
    }
}

$connection = new MySql(DBUSER, DBPASS);
$stm = $connection->query("select * from users WHERE name = ?", array("name"));
while($row = $stm->fetch()){
    echo "<p>". $row["name"] ."</p>";
}