Почему отсутствуют драйверы PHP 7 PDO?

Хорошо, итак. У меня есть PDO соединение с MySQL базой данных на локальном сервере. Это код для него

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";

try {
    $dbh = new PDO('localhost:host=$servername;dbname=test', $username, $password);
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

При открытии страницы выдает эту ошибку.

Error!: could not find a driver

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

sudo pacman -S php
sudo pacman -S php-sqlite
sudo pacman -S mysql

Может быть, я забыл некоторые. Вот содержимое моего файла /etc/php/php.ini

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

; If you wish to have an extension loaded automatically, use the following
; syntax:
;
;   extension=modulename
;
; For example:
;
;   extension=mysqli
;
; When the extension library to load is not located in the default extension
; directory, You may specify an absolute path to the library file:
;
   extension=/path/to/extension/mysqli.so
;
; Note : The syntax used in previous PHP versions ('extension=<ext>.so' and
; 'extension='php_<ext>.dll') is supported for legacy reasons and may be
; deprecated in a future PHP major version. So, when it is possible, please
; move to the new ('extension=<ext>) syntax.
;
;extension=bcmath
;extension=bz2
;extension=calendar
extension=curl
;extension=dba
;extension=enchant
;extension=exif
;extension=ftp
extension=gd
;extension=gettext
;extension=gmp
;extension=iconv
;extension=imap
;extension=intl
;extension=sodium
;extension=ldap
;extension=mysqli
;extension=odbc
;zend_extension=opcache
;extension=pdo_dblib
extension=pdo_mysql
extension=bz2.so
extension=mcrypt.so
extension=mysqli
;extension=pdo_odbc
;extension=pdo_pgsql
extension=pdo_sqlite
;extension=pgsql
;extension=pspell
;extension=shmop
;extension=snmp
;extension=soap
;extension=sockets
extension=sqlite3
;extension=sysvmsg
;extension=sysvsem
;extension=sysvshm
;extension=tidy
;extension=xmlrpc
;extension=xsl
extension=zip

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

EDIT Извините, что не указал на это. Я использую ОС Manjaro Linux.


person Mileta Dulovic    schedule 05.09.2019    source источник
comment
Первым параметром для создания нового объекта PDO является dsn — что-то вроде $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; (из руководства), поэтому проверьте строку подключения.   -  person Nigel Ren    schedule 05.09.2019
comment
Неа. Это не решение. Я взял это соединение с сайта php https://www.php.net/manual/en/pdo.connections.php   -  person Mileta Dulovic    schedule 05.09.2019
comment
Первый пример страницы, на которую вы указываете, это $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);.   -  person Nigel Ren    schedule 05.09.2019
comment
О Боже. Я глупый. Блин.. Большое спасибо. Очень много :). Вы собираетесь добавить ответ в эту тему или я.   -  person Mileta Dulovic    schedule 05.09.2019


Ответы (3)


При создании соединения ваш DSN имеет localhost в качестве типа базы данных...

$dbh = new PDO('localhost:host=$servername;dbname=test', $username, $password);

из руководства.

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

Кроме того, поскольку вы используете одинарные кавычки, имя сервера не будет заменено, поэтому используйте

$dbh = new PDO("mysql:host=$servername;dbname=test", $username, 
person Nigel Ren    schedule 05.09.2019

Попробуй это

sudo apt-get install php7-mysql
person Stanley Fernandes    schedule 05.09.2019
comment
Я на манджаро, и мы используем pacman. Я пробовал это раньше, и он возвращает ==> Error: Could not find all required packages: php7-mysql (Target) - person Mileta Dulovic; 05.09.2019

Я думаю, что расширения PDO отсутствуют. Добавьте указанные ниже расширения и перезапустите сервер.

Для Windows-сервера -

extension=php_pdo.dll
extension=php_pdo_mysql.dll

Для Linux-сервера -

extension=pdo.so 
extension=pdo_mysql.so
person Lets-c-codeigniter    schedule 05.09.2019
comment
Прошу прощения за отсутствие этой информации, но я использую Linux, а не Windows. И добавление этого тоже не помогло - person Mileta Dulovic; 05.09.2019
comment
Я починил это. Проверьте первые комментарии. И спасибо за ваше время :) - person Mileta Dulovic; 05.09.2019