php 无法使用PDO连接到MySQL

xggvc2p6  于 2023-02-03  发布在  PHP
关注(0)|答案(2)|浏览(142)

我正在使用this tutorial,我现在大约是04:00,我想通过PDO连接我的MySQL数据库。但是当我尝试连接时,我的网页总是显示"无法连接"。当我在数据库程序中使用PHPStorms时,我不得不将服务器时区更改为欧洲/阿姆斯特丹,然后才能连接到我的数据库。
我尝试在"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              |
+--------------------+---------------------+
j13ufse2

j13ufse21#

您正在使用的教程非常过时。
连接到PDO的代码必须遵循我的文章How to connect to MySQL with PDO中解释的某些规则。

  • 应配置错误报告模式
  • 它应该以正确的方式设置连接字符集
  • 它不应该捕获自己的错误来报告它们
  • 它应该遵循正确DSN语法,没有任何额外修饰
  • 它还可以设置一些有用设置

所以代码应该是这样的

$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";
$pdo = new \PDO($dsn, $user, $pass, $options);

在这里你可以看到正确的连接代码,它做了很多事情,其中,它告诉你当你的代码不能连接到数据库时,实际的问题是什么。

aiazj4mn

aiazj4mn2#

localhost附近的代码中有错误
使用分号代替冒号
改为这样写:

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

相关问题