【问题标题】:Having issues with my PHP class我的 PHP 类有问题
【发布时间】:2016-01-09 04:00:38
【问题描述】:

我有一个从头开始构建的自定义 PHP 类,它旨在连接、运行准备好的查询、输出和断开与数据库的连接。

问题是我不得不与多个错误作斗争。

这是其他修复后的最新版本。

警告:PDO::__construct(): MySQL server has gone away in E:\UniServerZ\www\simple db\index.php on line 23 警告:PDO::__construct(): Error while reading greeting packet。 E:\UniServerZ\www\simple db\index.php 中的 PID=8404 在第 23 行警告:未捕获的异常 'PDOException' 与消息 'SQLSTATE[HY000] [2006] MySQL 服务器已消失' 在 E:\UniServerZ\www \simple db\index.php:23 堆栈跟踪:#0 E:\UniServerZ\www\simple db\index.php(23): PDO->__construct('mysql:host=loca...', 'root' , 'password') #1 E:\UniServerZ\www\simple db\index.php(53): simpleDB->connectToDB() #2 {main} 在 E:\UniServerZ\www\simple db\index.php 中抛出第 23 行致命错误:第 23 行的 E:\UniServerZ\www\simple db\index.php 中的最大执行时间超过 30 秒

虽然我无法弄清楚,我的登录详细信息,主机详细信息等都是正确的,所以我不确定现在该怎么办,我确实在网上阅读了一些文章但它们没有太大帮助,所以我在这里上午。

这是我的课程和连接代码:

<?php
ini_set("display_errors", 1); 
error_reporting(E_ALL);

class fooBarBaz {
    protected $conn;
    private $host;
    private $username;
    private $password;
    private $db;
    private $driver;

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

    public function connecterino() {
        try {
            $this->conn = new PDO($this->driver . ':host=' . $this->host .';dbname=' . $this->db . ';charset=utf8', $this->username, $this->password);
        } catch(PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }

    public function queryForStuff($preparedQuery, $params) {
        try {
            $stmt = $this->conn->prepare($preparedQuery);
            $exec = $stmt->execute($params);
            return $stmt;
        } catch(PDOException $e) {
            echo 'Error: ' . $e->getMessage();
        }
    }

    public function getResultOfThatStuff($sql) {
        $data = $sql->fetchAll(PDO::FETCH_ASSOC);
        foreach($data as $row){
            print_r($row);
        }
    }

    public function disconnectDB() {
        $this->conn = null;
    }
}

try {
    $db = new fooBarBaz("mysql", "localhost:8000", "myDatabase", "root", "root");
    $db->connecterino();
    $query = $db->queryForStuff("select id from songs where id != :1", [":1" => "2"]);
    $db->getResultOfThatStuff($query);
} catch(PDOException $e) {
    echo 'Error: ' . $e->getMessage();
}
?>

我怎样才能让这段代码完全按预期工作?

我做错了什么/我看不到什么?

谢谢。

【问题讨论】:

  • 一般问题应该添加到这样的问题中:a) 操作系统似乎是 windows ....版本和 32/64 位? b) 你能用另一个前端连接到这个 MySQL 服务器吗(例如HeidiSQLcommand-line tool)? c) 您使用哪个版本的 MySQL/PHP? d) 当使用像&lt;?php $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); ?&gt; 这样简单的代码时,你能连接到 MySQL 服务器吗?
  • 特定于您的问题:localhost:8000
  • @VolkerK wow.,请不要恨我,毕竟是凌晨 4 点 xD!现在它返回数据。
  • 没问题,这里是凌晨 5:23 ;-)
  • 哈哈,还是谢谢老兄!

标签: php mysql pdo


【解决方案1】:

如果您想连接到默认端口以外的端口,您的DSN 必须看起来像

mysql:host=localhost;port=8000;dbname=test;charset=utf8

而不是

mysql:host=localhost:8000dbname=test;charset=utf8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多