无法使用PDO连接到MySQL

时间:2019-10-26 04:22:19

标签: php mysql pdo

我正在关注this tutorial,目前大约是04:00,我想通过PDO与我的MySQL数据库建立连接。但是我的网页将始终显示“无法连接”。当我尝试建立连接时。 当我在数据库程序中使用PHPStorms时,必须将serverTimezone更改为Europe / Amsterdam,然后才能连接到我的数据库。

我试图在“ new PDO()”代码中添加端口号。 我试图在代码中以及在MySQL服务器上更改时区,但是会出现此错误;

mysql> SET GLOBAL time_zone = 'Europe/Amsterdam';
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Europe/Amsterdam'
<?php

try {
    $pdo = new PDO('mysql:host=localhost:dbname=mytodo', 'root', '');
} catch (PDOException $e) {
    die('Could not connect.');
}

$statement = $pdo->prepare('select * from todos');

$statement->execute();

var_dump($statement->fetchAll());

require 'index.view.php';

其他信息:

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+

2 个答案:

答案 0 :(得分:2)

您正在使用的教程有些过时了。必不可少的是

die('Could not connect.');

这是一个令人讨厌的说法,可悲的是,它从一个过时的教程流向了另一个。我什至不得不在Stack Overflow上写一个专门的答案来解释why it is bad。问题是, PDO已经有了一个为什么您无法连接的答案。但是此代码有效地将其消除了。

问题是,如何与PDO正确连接,当出现问题时,它将告诉您肯定会出问题的方式?这是我自己的完全致力于问题How to connect to MySQL with PDO的教程。

$host = '127.0.0.1';
$db   = 'mytodo';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$options = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES   => false,
];
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
     $pdo = new \PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

在这里您可以看到正确的连接代码,该代码执行了许多您在本教程中遗漏的事情。其中,它告诉您实际的问题是什么。

因此,您必须更改代码并再次运行。然后它将显示您实际的错误消息。然后,您将不得不立即阅读并修复它,或者,对于收到的消息,Google会在Stack Overflow上找到解决方案。

答案 1 :(得分:-1)

您在本地主机附近的代码中有错误

使用分号代替结肠

改为写:

$pdo=new PDO('mysql:host=localhost;dbname=mytodo','root','');