SQLiteを使うPHPコードを実行した時に、"PHP Warning: PHP Startup: Unable to load dynamic library pdo_sqlite 〜 undefined symbol: sqlite3_column_table_name"というワーニングが出るようになったので、その時の解決方法について説明しています。
※ 本ページはプロモーションが含まれています。
SQLiteの最新バージョンをソースからインストールして、PDO(php-pdo)をインストールした後に、SQLiteを使うPHPコードを実行した時に警告(Warning)が出るようになってしまいました。
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib64/php/modules/pdo_sqlite (/usr/lib64/php/modules/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/pdo_sqlite.so (/usr/lib64/php/modules/pdo_sqlite.so: undefined symbol: sqlite3_column_table_name)) in Unknown on line 0
また、ウェブ上でphpinfo()を実行したら、PDO driversの値が"no value"になっていました(本来ならno valueではなくsqliteが表示されるはず)。
動作環境です。
$ cat /etc/system-release
CentOS Linux release 7.9.2009 (Core)
$ httpd -v
Server version: Apache/2.4.6 (CentOS)
$ php -v
PHP 7.4.16 (cli) (built: Mar 2 2021 10:35:17) ( NTS )
$ #ソースからインストールしたSQLite3のバージョン
$ sqlite3 -version
3.35.0 2021-03-12 15:10:09 acd63062eb06748bfe9e4〜
上記の警告は、SQLite3をソースからインストールした際に./configureコマンドを実行しましたが、./configureコマンドでCFLAGSオプションを指定しなかったのが原因です。
ですので、インストールしたSQLite3を一度アンインストールして(sudo make uninstall)、再度ソースからインストールする際の./configureコマンドでは、CFLAGS="-DSQLITE_ENABLE_COLUMN_METADATA=1"を指定すれば解決できます。
$ CFLAGS="-DSQLITE_ENABLE_COLUMN_METADATA=1" ./configure
SQLite3をソースからインストールする手順と、PHP7からPDOを通してSQLiteを使うまでの手順については別ページで説明していますので、そちらを参考にしてください。
(Amazon Linux2(ec2),CentOS7)SQLite3の最新バージョンをインストールする
【PHP7】PDOでソースからインストールした最新バージョンのSQLite3を使う