【发布时间】: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 服务器吗(例如HeidiSQL 或command-line tool)? c) 您使用哪个版本的 MySQL/PHP? d) 当使用像
<?php $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); ?>这样简单的代码时,你能连接到 MySQL 服务器吗? -
特定于您的问题:
localhost:8000 -
@VolkerK wow.,请不要恨我,毕竟是凌晨 4 点 xD!现在它返回数据。
-
没问题,这里是凌晨 5:23 ;-)
-
哈哈,还是谢谢老兄!