質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

Q&A

解決済

3回答

3391閲覧

FreeBSDサーバにて、PDOでDB接続を行いたい

shitsumu

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

0グッド

0クリップ

投稿2017/02/17 06:19

FreeBSDでサーバーを立てていて、その中にMySQLを入れています。
SQLインジェクションを防ぐため、プレースフォルプレースフォルダを使用するべく
PDOを使いDB接続を試みているのですが

Error:could not find driver

ブラウザ上で上記のエラーメッセージが表示されます。
色々調べたのですが、CentOSでの解決策ばかりで、FreeBSD向けの解決策の発見には至りませんでした。
PDOファイル自体はあるのですが、何が原因で「ドライバーがない」と言われているのかがわからず、苦戦しております。

どなたか解決策、もしくは考えられるであろう原因をご教授お願いいたします。

###発生している問題・エラーメッセージ

Error:could not find driver

###環境 version
FreeBSD 11.0
MySQL 5.6
PHP 5.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

シェルにログイン出来るのでしたら、

bash

1$ php -i | grep pdo 2pdo_mysql 3pdo_sqlite

こんな感じで、なんのDB用のモジュールがロードされているかが確認できます。
pdo_mysqlが表示されない場合はPDOのMySQL用のモジュールが読み込まれていないです。

ロードされていない場合はextension_dirを調べます。

bash

1$ php -i | grep extension_dir 2extension_dir => /usr/local/lib/php/xxxxxxxx => /usr/local/lib/php/xxxxxxxx 3 4$ ls -l /usr/local/lib/php/xxxxxxxx | grep pdo 5-r--r--r-- 1 root wheel 101784 45 2016 pdo.so 6-r--r--r-- 1 root wheel 24320 45 2016 pdo_mysql.so 7-r--r--r-- 1 root wheel 24752 45 2016 pdo_sqlite.so

エクステンションディレクトリにpdo_mysql.soがない場合は、モジュールがインストールされていない可能性が高いです。

上のコメントを見る限りインストールはされているようなので、iniファイルに設定がないか、設定はあるがsoファイルが所定のディレクトリにないので正常にロードされていないかのどちらかだと思われます。

設定が存在する場合はiniファイルを調べます。

bash

1$ php -i | grep ini 2Loaded Configuration File => /usr/local/etc/php.ini 3Scan this dir for additional .ini files => /usr/local/etc/php
  • Loaded Configuration Fileのiniファイル
  • Scan this dir for additional .ini filesのディレクトリにあるiniファイル

のどちらかにextension=pdo_mysql.soがない場合は追記します。

自分はいつもpkgでインストールしているので、/usr/local/etc/php/extensions.iniに自動的に追記されます。
portsから入れた場合はもしかしたら追記されないかもしれません…

bash

1$ cat /usr/local/etc/php.ini | grep pdo 2$ find /usr/local/etc/php/ -name '*.ini' | xargs grep pdo 3/usr/local/etc/php/extensions.ini:extension=pdo.so 4/usr/local/etc/php/extensions.ini:extension=pdo_sqlite.so 5/usr/local/etc/php/extensions.ini:extension=pdo_mysql.so ←これがない場合使えない

PDO自体のエラーが出ないということは、pdo.soはロードされていると思われますので、extension=pdo.soが書かれている下の行あたりにextension=pdo_mysql.soを追記すれば使えるようになるかと思います。

ちなみにこの手のミドルウェアのハウツーはインストール方法やパスは違えど、CentOSやUbuntuのノウハウでもなんら変わりありませんので、食わず嫌いせず一応確認してみるとよいと思います。

投稿2017/02/22 15:11

nayuneko

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shitsumu

2017/03/01 00:47

考えられる可能性を、順追って説明してくださり、とても分かりやすかったです! その他の方もご回答ありがとうございました! 今回エラーが起きた原因として、ドライバーのインストールをする際 make コマンドで実行していたのですが、 sudo make だけでは完全にPDOパッケージをインストールできていなかった様です。 sudo make install とすることで、自動的に「.soファイル」にも記述がされ PDOが使用可能となりました。 私の無知が招いた結果出力されたエラーでしたが、 「現在何がどうなっているのか」を詳しくコマンドを使い、解説していただいたからこそ 解決できたと思っています。 ありがとうございました。
guest

0

アプリのインストールはportsでやってますよね?
/usr/ports/databases/php56-pdo_mysql
あたりをインストールする必要があるでしょう

phpinfo()
などでドライバーがインストールされているかどうかは
確認ができます

投稿2017/02/17 07:02

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shitsumu

2017/02/18 03:01

ご回答ありがとうございます。 /usr/ports/databases/php56-pdo_mysql にMakefileがありましたので、 makeコマンドにてインストール行いました。 phpinfo()にて確認したところ pdo drivers  が sqlite となっていました。 しかしエラーがまだ Error:could not find driver と出ているのですが、 その他設定するところ等ございますでしょうか?
yambejp

2017/02/20 08:21

シェル画面で「pkg info|grep php56」として、 「php56-pdo_mysql-5.6.xx」が表示されますね? 「php56-pdo-5.6.xx」はどうでしょう? インストール後、apacheは再起動しましたか?
shitsumu

2017/02/22 06:52

シェル画面で php56-pdo-5.6.xx が確認できましたので、 インストールしてみましたが、エラーメッセージが依然出ています。 appachも再起動してみました。 pkg info|grep php56でphp56-pdo_sqliteも発見できましたので、 インストールしてみましたが、変化なしでした。 とてもわかりやすく教えていただいているのに、 何度も申し訳ございません。 下記に示しているのが、DB接続しているプログラムなのですが、 こちらで不具合が出ているわけではなさそうですよね? //DB connect try{ $db = new PDO('mysql:host=localhost;dbname=demo', 'root', 'password'); }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } インストールしたドライバをどこかで使用するなどと どこかに記述する必要ありますでしょうか?
guest

0

phpの設定ファイルを確認してみたら、どうでしょうか。

  • /usr/local/etc/php.ini
  • /usr/local/etc/php/*.ini

以下のような、記述が必要だと思います。

<例>

extension=mysql.so extension=mysqli.so extension=pdo.so extension=pdo_mysql.so

投稿2017/02/22 14:19

gorogoroIT

総合スコア447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問