【问题标题】:using PDO object for a Select query使用 PDO 对象进行 Select 查询
【发布时间】:2014-11-21 08:33:51
【问题描述】:

我是 PDO 的初学者。我正在关注学习 PDO 的教程。我想使用一个简单的 select 语句来获取用户的 id。

但是当我运行 index.php 时,它不显示任何 echo !我哪里错了?

我有四个文件:

config => 设置用户名和密码...

DB_Connect :

class DB_Connect {

    // constructor
    function __construct() {

    }

    // destructor
    function __destruct() {
        // $this->close();
    }

    // Connecting to database
    public function connect() {
        require_once 'include/config.php';
        try {
            $hostname = DB_HOST ;
            $dbname   = DB_DATABASE;
            $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", DB_USER, DB_PASSWORD);
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }

        return $dbh;
    }



}

DB_Functions:

class DB_Functions {

    private $db;

    //put your code here
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // connecting to database
        $this->db = new DB_Connect();
        $this->db->connect();
    }

    // destructor
    function __destruct() {

    }


    function getUsers(){

        $sql = "SELECT * FROM users";
        foreach ($this->$db->query($sql) as $row)
        {
            echo $row->id;
        }

        /*** close the database connection ***/
      //  $db = null;

    }
}

index.php

<?php

    require_once 'include/DB_Functions.php';
    $qr = new DB_Functions();
    $qr->getUsers();



?>

【问题讨论】:

  • $this-&gt;$db-&gt;query($sql)$this-&gt;db-&gt;query($sql)
  • 我改成db了,但是还没有输出。
  • 你的数据库有连接吗?您是以对象还是数组的形式获取结果?试试var_Dump($row)
  • 尝试在页面顶部添加error_reporting(E_ALL); ini_set('display_errors', '1');,看看你得到了什么错误
  • 所以很明显没有建立到数据库的连接。调试那个连接部分,看看是否所有的值 uname、pass、host、dbname 等都设置正确。

标签: php mysql pdo


【解决方案1】:

db_connect

class DB_Connect {
    public $dbh;
    // constructor
    function __construct() {

    }

    // destructor
    function __destruct() {
        // $this->close();
    }

    // Connecting to database
    public function connect() {
        require_once 'include/config.php';
        try {
            $hostname = DB_HOST ;
            $dbname   = DB_DATABASE;
            $this->dbh = new PDO("mysql:host=$hostname;dbname=$dbname", DB_USER, DB_PASSWORD);
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }
}

db_functions

class DB_Functions {

    private $db;

    //put your code here
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // connecting to database
        $this->db = new DB_Connect();
        $this->db->connect();
    }

    // destructor
    function __destruct() {

    }


    function getUsers(){

        $sql = "SELECT * FROM users";
        foreach ($this->db->dbh->query($sql) as $row)
        {
            echo $row->id;
        }

        /*** close the database connection ***/
      //  $db = null;

    }
}

您没有数据库连接,因为您现在将 PDO 连接分配给一个变量。因此,脚本的其余部分无法访问您的连接。至少,我现在是这么想的。

【讨论】:

  • 什么是查询功能?我必须实现查询功能?
  • 查询函数是 PDO 类的一部分。您无法访问您的 PDO 类,因为当您使用 PDO 连接到数据库时,您会创建一个局部变量,该变量只能在该单个函数中访问,而不能在您的类的其余部分中访问。因此,您需要像这样将您的连接提供给其他班级:$this-&gt;dbh
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 2012-11-28
  • 2011-11-11
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
相关资源
最近更新 更多