Не работает ли PHP define () со строкой подключения PDO? - PullRequest
0 голосов
/ 04 июля 2019

Я использовал PHP define () для определения констант для моей строки подключения PDO, т.е.в mysqli.Однако, похоже, это не сработало.Я продолжал получать сообщение об ошибке: Connection failed: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO), когда использовал следующий код:

Строка подключения PDO работала, когда я не использовал функцию define () PHP для передачи переменных подключения.Я использую PHP 7, MySQL 8 и Apache 2.4.

Код проблемы ниже:

error_reporting(E_ALL); //check all type of errors
ini_set('display_errors', 1); // display those if any happen

//Database Connection Constant
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_NAME', 'gallery_db');

echo DB_PASS;
//phpinfo();

//$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);


try {
    $dbc = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . "," . DB_USER, DB_PASS);
    // set the PDO error mode to exception
    $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if ($dbc) {
        echo "connected";
    }
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

Рабочий код подключения:

$servername = 'localhost';
$username = 'root';
$password = 'root';
$dbn = 'gallery_db';

//phpinfo();

try {
    $dbc = new PDO("mysql:host=$servername;dbname=$dbn", $username, $password,
        array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_PERSISTENT => false
        ));
    // set the PDO error mode to exception
    $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if ($dbc) {
        echo "connected";
    }
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

Почему PHP define () не работает в строке подключения PDO?

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Изменение

$ dbc = новый PDO ("mysql: host =". DB_HOST. "; Dbname =". DB_NAME. ",". DB_USER, DB_PASS);

до

$ dbc = новый PDO ("mysql: host =". DB_HOST. "; Dbname =". DB_NAME, DB_USER, DB_PASS);

0 голосов
/ 04 июля 2019

В первом случае вы попробуете это:

$dbc = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.",". DB_USER, DB_PASS);

У этого есть только два аргумента, но PDO необходимо 3:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>

https://php.net/manual/en/pdo.connections.php

В результате получается, что константа вашего пароля работает, но вошла в часть имени пользователя соединения.

Исправление:

$dbc = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...