PDO 连接数据库的问题

6
我需要知道我所编写的PDO扩展在语法和语义上是否有效。我一直在使用var_dump()函数来查看我的连接变量,虽然变量被传递到构造函数中(具有正确的值),但我无法从数据库中获取任何内容。
我在PHP手册上研究了PDO类,并从中发现我所使用的类几乎与维基页面示例部分中给出的扩展类完全相同。
下面是我的代码:
class DBConnector extends PDO
    {
        private $host;
        private $username;
        private $password;
        private $db;
        private $dns;

        public function __construct($host, $username, $password, $db)
        {
            $this->host = $host;
            $this->username = $username;
            $this->password = $password;
            $this->db = $db;

            $this->dns = "mysql:dbname=".$this->db.";host=".$host;
            $connection = parent::__construct($this->dns, $this->username, $this->password);

        }
    }

这里有一个测试查询,返回一个空数组。数据库里有数据,所以显然有些地方不正确。

function testQuery()
{
    global $connection;

    $query = "
        SELECT * FROM users
    ";

    $stmt = $connection->prepare($query);

    $result = $stmt->fetchAll();


}

我做错了什么吗?

2个回答

11

试试这个:

class DBConnector extends PDO
{
  private $connection;
  private $host;
  private $username;
  private $password;
  private $db;
  private $dns;

  public function __construct($host, $username, $password, $db)
  {
      $this->host = $host;
      $this->username = $username;
      $this->password = $password;
      $this->db = $db;
      $this->dns = "mysql:dbname=".$this->db.";host=".$host;
      $this->connection = parent::__construct($this->dns, $this->username, $this->password);
      $this->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  }

  public function testQuery()
  {
      $query = "SELECT * FROM a";
      $stmt = $this->prepare($query);
      if($stmt->execute()){
          return $stmt->fetchAll();
      }
      return array();
  }
}

$tg = new DBConnector('localhost', 'root', '', 'test');
$t = $tg->testQuery();
print_r($t);

$connection是局限于DBConnector::__construct函数的本地变量,我没有看到任何全局变量。因此,在您的testQuery函数中它将不存在。通过将函数移动到类中,并创建连接属性,可以轻松使用它。


我尝试过了,但不幸的是,当我在连接上使用var_dump()时,它返回NULL。还有其他什么我可以尝试吗? - zeboidlund
是的,很奇怪,我也遇到了同样的问题。我已经更新了我的代码。我正在研究为什么会这样。 - Book Of Zeus
还是不行 :/。这是我的输出:object(PDOStatement)#2 (1) { ["queryString"]=> string(28) " SELECT * FROM users " } NULL还有其他的吗?顺便说一句,非常感谢你的帮助。 编辑:你认为我的端口配置或套接字之类的东西可能有问题吗?我正在运行Linux,如果这有帮助的话。 - zeboidlund
我刚刚更新了它,请再次将我的代码复制到一个PHP文件中并尝试(您可能需要更改凭据、表和数据库)。对此我感到抱歉。我从我的测试中得到了一个数组:“Array([0] => Array([part_no] => 240-63100-00 [0] => 240-63100-00 [description] => YB MV Cherry [1] => YB MV Cherry ....” - Book Of Zeus
我得到了array(0) { }。还是不起作用。我认为我的连接有问题。我使用Dreamhost,并且可以通过mysql workbench连接到我的数据库。我以前遇到过这个问题 - 除了PDO范围之外,可能还有其他问题吗? - zeboidlund
显示剩余2条评论

3

您需要执行查询。

function testQuery()
{
    global $connection;

    $query = "
        SELECT * FROM users
    ";

    $stmt = $connection->prepare($query);

    if($stmt->execute()){

       $result = $stmt->fetchAll();

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接