Не удается подключиться к MySQL с помощью PDO - PullRequest
1 голос
/ 26 октября 2019

Я следую этому руководству , сейчас у меня около минуты 04:00, и я хочу установить соединение с моей базой данных MySQL через PDO. Но моя веб-страница всегда будет давать «Не удалось подключиться». когда я пытаюсь установить связь. Когда я использовал 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 ]

1 голос
/ 26 октября 2019

Учебное пособие, которое вы используете, немного устарело. И основная часть:

die('Could not connect.');

Это неприятное утверждение, которое, к сожалению, блуждает от одного устаревшего учебника к другому. Мне даже пришлось написать специальный ответ о переполнении стека, объясняющий , почему это плохо . Дело в том, что PDO уже имеет ответ, почему вы не можете подключиться. Но этот код эффективно отключает его.

Итак, вопрос в том, как правильно подключиться к PDO, как он скажет вам что, безусловно, идет не так , когда что-то идет не так? И здесь идет мой собственный учебник, полностью посвященный вопросу Как подключиться к MySQL с помощью 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 получить сообщение, которое вы получили, и найти решение здесь, на переполнение стека.

0 голосов
/ 26 октября 2019

у вас есть ошибка в коде рядом с localhost

используйте точку с запятой вместо двоеточия

вместо этого напишите это,

$ pdo = new PDO ('mysql: host = localhost; имя_бд = mytodo», 'корень', '');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...