I've been trying to install php (7.2) in Ubuntu (16.04) with PDO enabled. I don't need php as apache module, because I want to use PHPs built-in server (in cli mode, like php -S localhost:80).

So, here is what i do:

sudo apt-get install php

sudo apt-get install php-mysql

sudo cp /usr/lib/php/7.2/php.ini-production.cli /etc/php/7.2/cli/php.ini

Now, in php.ini uncommented:

extension=pdo_mysql

And still when i run php -v I get the error:

PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0 

php -m output:

[PHP Modules] Core date filter hash libxml openssl pcntl pcre Reflection session sodium SPL standard zlib [Zend Modules] 
8

2 Answers

I solved the problem this way:

sudo apt-get --purge remove php-common

sudo apt-get install php-common php-mysql php-cli

Now there is no error and php -m shows it has everything:

[PHP Modules] calendar Core ctype date exif fileinfo filter ftp gettext hash iconv json libxml mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql Phar posix readline Reflection session shmop sockets sodium SPL standard sysvmsg sysvsem sysvshm tokenizer Zend OPcache zlib [Zend Modules] Zend OPcache 

Still don't know what caused the issue in the first place

7

I created the same issue for myself on my work box by manually uncommenting several

;extension=<module> 

lines in the php.ini. Which was really me second-guessing the apt-get install process. I think modern php7+ handles these extensions using conf.d specific files like:

  • /etc/php/7.3/cli/conf.d/10-pdo.ini
  • /etc/php/7.3/cli/conf.d/20-pdo_mysql.ini

The answer then for me was re-commenting these ;extension lines in the cli's php.ini file.