PHP-файлы для веб-сайта показывают ошибку: не может найти драйвер - PullRequest
0 голосов
/ 08 июля 2019

Я создаю блог для своего портфолио и разрабатываю его с нуля. Я подключил свою базу данных, и соединение есть, но оно говорит, что не может найти драйвер.

Я часами читаю все остальные посты, и ни один из ответов не решил мою проблему. Я скачал фактические файлы, в которых говорилось, что они были драйверами, я вынул точки с запятой из файла php.ini, я снова и снова перепутывал свой код для проверки орфографических ошибок, и я проверил, чтобы убедиться, что все драйверы фактически загружены и работают на моей странице PHPinfo.

Мне кажется, что я забыл ключевую информацию, которая поможет ответить на этот вопрос, но ничего не приходит на ум. Я обновлю, если я думаю о чем-нибудь еще. Заранее спасибо!

<?php
ob_start();
session_start();

//database credentials
$hostname = "localhost";
$username = "root";
$password = "";
$dbname = "portfolio_blog.sql";
global $db;


function testdb_connect ($hostname, $username, $password){
    $db = new PDO('mysqli:host=$hostname;$dbname', $username, $password);
    return $db;
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

try {
    $db = testdb_connect ($hostname, $username, $password);
    echo 'Connected to database';
}

    catch(PDOException $e) {
    echo $e->getMessage();
}

1 Ответ

1 голос
/ 08 июля 2019

У вас есть несколько вопросов:

  1. Проблема с драйвером.

Драйвер называется mysql, вы ввели mysqli. mysqli - это расширение для PHP, которое заменило старое устаревшее расширение mysql. К сожалению, ни один из них не имеет ничего общего с PDO.

Драйвер, который вы ищете - mysql. Первое изменение должно изменить 'mysqli:host=$hostname;$dbname' на 'mysql:host=$hostname;$dbname'.

  1. ' против ''

Вы используете одинарную кавычку, но похоже, что вы пытаетесь использовать значения $hostname и $dbname в вашей строке dsn. Если вы хотите использовать эти переменные, вам нужно использовать двойные кавычки для PHP для выполнения замены. Использование одинарных кавычек буквально вставит $hostname и $dbname в аргумент.

Второе изменение происходит от 'mysql:host=$hostname;$dbname' до "mysql:host=$hostname;$dbname"

  1. $dbname не определено.

Вам нужно будет сделать это в области видимости.

function testdb_connect ($hostname, $username, $password, $dbname){
    $db = new PDO("mysql:host=$hostname;$dbname", $username, $password);
    return $db;
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
  1. DSN ищет имя базы данных. Не файл SQL.

$dbname означает "portfolio_blog.sql", что означает, что вы пытаетесь загрузить файл .sql. Вместо этого вам нужно будет указать имя базы данных. Я не знаю, что это такое, поэтому вам, вероятно, понадобится поместить это в себя.

Я думаю, вам нужно изменить свой DSN, чтобы обработать это снова.

Пример, предполагая, что имя базы данных portfolio_blog:

$dbname = "portfolio_blog"

и

"mysql:host=$hostname;dbname=$dbname"


Я бы порекомендовал что-то вроде этого:

<?php
ob_start();
session_start();

//database credentials
$hostname = "localhost";
$username = "root";
$password = "";
$dbname = "portfolio_blog";
global $db;


function testdb_connect ($hostname, $username, $password, $dbname){
    $db = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $db;
}

try {
    $db = testdb_connect ($hostname, $username, $password, $dbname);
    echo 'Connected to database';
}

    catch(PDOException $e) {
    echo $e->getMessage();
}

Есть большая вероятность, что я что-то пропустил, вам придется принимать сообщения об ошибках по мере их поступления.

Удачи.

...