【问题标题】:PDO return $row from a class methodPDO 从类方法返回 $row
【发布时间】:2013-08-05 04:00:42
【问题描述】:

大家好,我正在学习 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>";
        }
    }
    */
}

【问题讨论】:

    标签: oop methods pdo


    【解决方案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>";
    }
    

    【讨论】:

    • 太棒了。有用。我现在将安全提示应用于我的代码,并根据我的需要自定义您的代码。再次感谢。问候
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2013-07-04
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多