Can't connect to MySQL with PDO

℡╲_俬逩灬. 提交于 2020-11-29 03:11:51

问题


I'm following this tutorial, I'm currently around minute 04:00 and I want to make a connection with my MySQL database through PDO. But my webpage will always give "Could not connect." when I'm trying to make the connection. When I used PHPStorms inside Database program, I had to change my serverTimezone to Europe/Amsterdam and then I was able to connect to my db.

I tried to add the port number in the 'new PDO()' code. I tried to change the timezone in the code and on my MySQL server but it gives this error;

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';

Extra information:

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

回答1:


The tutorial you are using is a bit outdated. And the essential part is

die('Could not connect.');

It's a nasty statement that, sadly, is wandering from one outdated tutorial to another. I even had to write a dedicated answer on Stack Overflow explaining why it is bad. The thing is, PDO already has an answer why you couldn't connect. But this code effectively muting it out.

So the question is, how to properly connect with PDO, the way it will tell you what is certainly going wrong when something going wrong? And here goes my own tutorial entirely dedicated to the question 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());
}

Here you can see the proper connection code that does a lot of things that are just missed in your tutorial. Among them, it tells you what the actual problem is.

So you have to change your code and run it again. Then it will display you the actual error message. Then you will have to either read and fix it right away or, Google for the message you get and find a solution here on Stack Overflow.




回答2:


You have error in code near localhost

Use semicolon in place of colon

Write this instead:

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


来源:https://stackoverflow.com/questions/58568024/cant-connect-to-mysql-with-pdo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!