9cubed
ブログ | Tailwind | Vite | Python | Node.js | Linux | PowerShell | その他 | 将棋ウォーズ | 歌の練習
CentOS7

PHPからMariaDB(MySQL)へ接続

公開日:2019-07-03
更新日:2020-07-21

1. 概要

PHP から MariaDB(MySQL)への接続を行います。

2. 接続確認プログラムの作成

DB は、前回の「MariaDB(MySQL) のインストール」で作成したものを使います。

vi /var/www/html/db.php
を実行して、以下のファイルを作成します。

<?php
  $db = new PDO('mysql:dbname=db_test; host=127.0.0.1;port=3306', 'root', 'root');
  $sql = 'select * from d_data where data = :data';
  $stmt = $db->prepare($sql);
  $stmt->bindValue(':data', 'bbbb');
  $result = $stmt->execute();
  $dataList = [];
  while($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $dataList[] = $data;
  }
  
  var_dump($dataList);

作成後、http://192.168.233.100/db.php にアクセスすると、
HTTP ERROR 500 のエラーになります。

3. PHP のエラーの表示

エラーは以下で確認できます。
tail /etc/httpd/logs/error_log

今回はテスト環境のため、画面にエラーが出るようにします。
/etc/php.ini の display_errors が Off になっているため、On にします。
本番環境では Off のままにしてください。

vi /etc/php.ini
display_errors = On

php.ini の修正後、apache を再起動します。
systemctl restart httpd

http://192.168.233.100/db.php にアクセスするとエラーの詳細が表示されます。
Fatal error: Uncaught Error: Class 'PDO' not found in /var/www/html/db.php:2
Stack trace: #0 {main} thrown in /var/www/html/db.php on line 2
PDO が見つからないと言われています。

4. PDO の有効化

必要なモジュールをインストールします。

1. pdo のインストール

インストール
yum install --enablerepo=remi-php74 php-pdo

インストール先の確認
rpm -ql php-pdo

インストール先
php.d 配下に .ini があるため、php.ini の修正は不要です。
/etc/php-zts.d/20-pdo.ini
/etc/php-zts.d/20-sqlite3.ini
/etc/php-zts.d/30-pdo_sqlite.ini
/etc/php.d/20-pdo.ini
/etc/php.d/20-sqlite3.ini
/etc/php.d/30-pdo_sqlite.ini
/usr/lib64/php-zts/modules/pdo.so
/usr/lib64/php-zts/modules/pdo_sqlite.so
/usr/lib64/php-zts/modules/sqlite3.so
/usr/lib64/php/modules/pdo.so
/usr/lib64/php/modules/pdo_sqlite.so
/usr/lib64/php/modules/sqlite3.so

2. mysqlnd のインストール

インストール
yum install --enablerepo=remi-php74 php-mysqlnd

インストール先の確認
rpm -ql php-mysqlnd

インストール先
php.d 配下に .ini があるため、php.ini の修正は不要です。
/etc/php-zts.d/20-mysqlnd.ini
/etc/php-zts.d/30-mysqli.ini
/etc/php-zts.d/30-pdo_mysql.ini
/etc/php.d/20-mysqlnd.ini
/etc/php.d/30-mysqli.ini
/etc/php.d/30-pdo_mysql.ini
/usr/lib64/php-zts/modules/mysqli.so
/usr/lib64/php-zts/modules/mysqlnd.so
/usr/lib64/php-zts/modules/pdo_mysql.so
/usr/lib64/php/modules/mysqli.so
/usr/lib64/php/modules/mysqlnd.so
/usr/lib64/php/modules/pdo_mysql.so

3. モジュールの読み込みの確認

apache を再起動します。
systemctl restart httpd

phpinfo() を確認して、PDO, pdo_mysql, mysqlnd のセクションが追加されていれば OK です。

http://192.168.233.100/db.php にアクセスすると、エラーが以下のように変わります。
db.php 2行目で、DB の接続が拒否されています。
Fatal error: Uncaught PDOException: 
SQLSTATE[HY000] [2002] Permission denied in /var/www/html/db.php:2
Stack trace: #0 /var/www/html/db.php(2):
PDO->__construct('mysql:dbname=db...', 'root', 'root') #1 {main} thrown in /var/www/html/db.php on line 2

5. SELinux の設定変更

SELinux(SUSE Linux とは無関係)を使うと、詳細なアクセス制御が行えます。
これにより、DB 接続時に Permission denied が発生しているため、設定を変更します。

以下のコマンドを実行して、httpd からのネットワーク接続を可能にします。
setsebool -P httpd_can_network_connect 1
-P 永続化

http://192.168.233.100/db.php にアクセスすると、正常に結果が表示されます。
apache の再起動は不要です。

また、エラーの原因が SELinux かどうかは、一時的に SELinux を無効にすることで判断することができます。
テスト環境やセキュリティー的に問題ない場合は、無効のままでも良いかもしれません。
setenforce 0  無効化
setenforce 1  有効化
getenforce    取得

YouTube X

新着一覧

  • SCSS のインストールVite
  • Tailwind CSS のプロジェクトの作成Tailwind
  • TypeScriptのプロジェクトの作成Vite
  • Flask のインストールと動作確認Python
  • 簡易Webサーバーの作成Python
  • pipeline で文章の生成Python
  • pipeline で文章の要約Python
  • 音声から文字起こしPython
  • Node.js のインストールNode.js
  • .ps1(PowerShellスクリプト)を実行可能にするPowerShell

アーカイブ

  • 2025/12
  • 2025/11
  • 2025/10
  • 2025/09
  • 2025/08

以前のカテゴリー一覧

  • CakePHP3
  • CentOS7
  • HTML・CSS・JavaScript
  • Haskell
  • JavaScript
  • Kotlin
  • Laravel5
  • PHP
  • Python
  • Ruby
  • RubyOnRails5
  • TypeScript
  • Vue.js
  • Webサーバ講座
  • Webプログラミング講座
  • jQuery
  • linux
  • パソコン講座
  • ブログ
  • プログラミング講座
  • メモ帳作成講座
  • 数学

Copyright © 9cubed. All Rights Reserved.

プライバシーポリシー 利用規約
▲