【问题标题】:PDO Connection to DB issuesPDO 与数据库的连接问题
【发布时间】:2011-09-18 22:44:56
【问题描述】:

我需要知道我编写的 PDO 扩展在句法和语义上是否有效。我一直在 var_dumping() 我的连接变量,当变量被传递给构造函数(具有正确的值)时,我实际上无法从我的数据库中获取任何内容。

我研究了 PHP 手册中的 PDO 类,发现我使用的类与 wiki 页面示例部分中给出的扩展类几乎相同。

这是我的代码:

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();


}

我是不是做错了什么?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    试试这个:

    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。还有什么我可以尝试的吗?
    • 是的,很奇怪,我也一样。我更新了我的代码。我正在研究为什么会这样。
    • 好的,我找到了,你不需要使用->connection->prepare,因为你已经扩展了它。我更新了我的代码
    • 仍然无法正常工作:/。这是我的输出: object(PDOStatement)#2 (1) { ["queryString"]=> string(28) " SELECT * FROM users " } NULL 还有什么?我很感谢你的帮助,顺便说一句。编辑:您认为我的端口配置或套接字或其他东西可能有问题吗?我正在运行 linux,如果有帮助的话。
    • 我刚刚更新了它,再次将我的代码复制到 php 并尝试(您可能需要更改凭据、表和数据库)。对于那个很抱歉。我从我的测试“Array ([0] => Array ([part_no] => 240-63100-00 [0] => 240-63100-00 [description] => YB MV Cherry [1] => YB MV Cherry ...."
    【解决方案2】:

    你需要执行查询。

    function testQuery()
    {
        global $connection;
    
        $query = "
            SELECT * FROM users
        ";
    
        $stmt = $connection->prepare($query);
    
        if($stmt->execute()){
    
           $result = $stmt->fetchAll();
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 2014-10-31
      • 2016-04-02
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多