【问题标题】:PHP PDO class use in different class (doesn't work)PHP PDO 类在不同的类中使用(不起作用)
【发布时间】:2017-11-16 19:33:34
【问题描述】:

我想在表格上获取数据并编写一个类。但是这个类不起作用,因为 pdo 无法访问。这个类如何获取表格数据?

$db = new PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx");


class uye extends PDO{
    var $id;
    var $kadi;

    function cek($id){
        $query = $db->query("SELECT * FROM btc WHERE id='{$id}'", PDO::FETCH_ASSOC);
        if ( $query->rowCount() ) { 
          foreach( $query as $row ){
              $this->id=$row["id"];
              $this->kadi=$row["kadi"];
          }
        }
    }
}


$bilgiler=new uye;
$bilgiler->cek(1);

echo $bilgiler->kadi;

【问题讨论】:

  • 你能发布你调用这个类的另一个文件吗
  • 您在语句中也容易受到 SQL 注入的影响
  • 你到底想做什么?您的类扩展了 PDO 但尝试使用另一个 PDO 实例。这样做你想完成什么?
  • 我想声明一个类并发送这个类的参数。然后这个请求将表数据返回给我
  • @Yunus,我给了你一个低调。但我没有通过 ID 获取,因为 ID 通常是 AI,因此它只会返回 1 条数据而不是一堆像你一样的数据..你也没有告诉我们是什么让$id

标签: php class pdo extends


【解决方案1】:

所以我不知道你从哪里得到$id,所以我不知道从哪里获取所有数据。

我通常将我的代码分解为文件和文件夹,因为我发现这更容易使用并且其他人也可以使用。

// database connection file (dbc.php)



class Database
{
    private $host = "127.0.0.1";
    private $db = "";
    private $user = "";
    private $password = "";
    public $conn;



    public function dbConnect()
    {
        $this->conn = null;
        try
        {
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db, $this->user, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch (PDOException $exception)
        {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;

    }
}

然后我创建一个通用文件,你可以在其中存储所有常用函数或静态函数

// Common file (common.php)


require_once('dbc.php');

class DBCommon
{
    private $conn;

    public function __construct()
    {
        $database = new Database();
        $db = $database->dbConnect();
        $this->conn = $db;
    }

    public function run($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }


}

所以再解释一下,你会看到 run() 的函数,这只是为了节省每次查询时的繁琐 $this->conn->prepare.. 现在你可以运行 $this->run()

下一个是你的类文件。这是你的逻辑所在:

// your class file... (class.btc.php)


require_once "common.php";


class BTC extends DBCommon

{
    public function getQuery()
    {
        $stmt = $this->run("SELECT * FROM `btc`");
        $stmt->execute();

        while ($row = $stmt->fetch(PDO::FETCH_OBJ))
        {
            $rows[] = $row;
        }

        return $rows;

    }

}

不言自明..

然后是你的调用方法..让我们说index.php

// File you're calling your class from (index.php)


    require_once "class.btc.php";

    $fetch = new BTC();

    $returnData = $fetch->getQuery();


    foreach ($returnData as $data)
    {
        echo
        "<p>$data->something</p>
        <p>$data->somethingElse</p>";
    }

我知道这似乎有点啰嗦,但总体上节省的时间会有所帮助!

【讨论】:

  • 感谢您的帮助。但是这个方法很长。你知道最短的方法吗?
  • @Yunus,一开始是一个漫长的过程,是的,但是,设置初始文件,它要快得多。
  • @Option 谢谢。我做到了,但现在有不同的问题。你能看看这个问题吗? -> Question
猜你喜欢
  • 2017-10-08
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多