【ツールの概要】
・PHPに慣れている方にとっては当たり前のことですが、batやVBSのようにサーバー内部の処理を行わせます。
・(1)から進んで、DB「MySQL」へアクセスします。
・スクリプトの書き方としては、まずは小規模でVBSとかで親しみやすい関数型みたいな感じです。
【環境(使っている環境)】
Windows 10 Pro (Serverでも動くはず)
PHP 5.6以降?
MySQL 8.0(5.6と5.5とかでも動くはず)
【MySQL導入】
(1) MySQLのサイトからダウンロードしてインストールします。
<インストール参考サイト>
MySQL :: Download MySQL Community Server
MySQL入門者でもわかる!3ステップのインストール方…|Udemy メディア
(2) PHPと同様に環境変数PATHを通しておく。→コマンドプロンプトで「mysql -uroot -p」と打ってパスワード入力画面が出るようにしておく。
(3) ここでは、「sample」スキーマ(データベース)を作成して、「user」テーブルを以下の画像のように作っておく。
【PHPの設定】
php.iniの以下を変更する。
・「;extension_dir = "ext"」→「extension_dir = "ext"」 コメントアウトをなくしてextフォルダを参照させる。
・「;extension=pdo_mysql」→「extension=pdo_mysql」 コメントアウトをなくしてPDO(MySQL)を有効にする。
可能ならログ出力も有効にして、コマンドプロンプトでphp -vを起動したときにエラーが出ていないようにする。
【PHP(引数にして実行するPHPファイル(test.php))】
<?php require_once "D:\\phptest\\common1.php" ; logging('test.php 起動'); $query = 'SELECT * FROM user WHERE id=2;'; $all = mysqlconnect($query); // 「//」でコメントアウトしているところはデータが複数ある場合にこうしたら取れるよ的なアレ // i=0; // foreach ($all as $data){ // $id[i] = $data['id']; // $name[i] = $data['name']; // $address[i] = $data['address']; // i++; // } // echo (int)$id[0].' '.(string)$name[0].' '.(string)$address[0]; echo (int)$all[0]['id']."\r\n" .(string)$all[0]['name']."\r\n" .(string)$all[0]['address'];
【PHP(関数を記載するPHP(common1.php))】
<?php define("mysql_schema", "mysql:dbname=sample"); define("mysql_user", "root"); define("mysql_password", "root"); function logging($str) { error_log(date("[Y/m/d H:i:s] ") .rtrim($str). "\r\n", 3, "D:\\phptest\\test_log.txt"); } function mysqlconnect($query) { try { $dbh = new PDO( mysql_schema ,mysql_user ,mysql_password ,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) ); $sql = $dbh->prepare($query); $stmt = $sql->execute(); if (!$stmt) { logging('結果!とれませんでした!!'); print_r('MySQLエラー_'.$dbh->errorInfo()); } $all = $sql->fetchAll(); $sql = null; return $all; } catch (PDOException $e) { logging('error_'.$e->getMessage()); } }
【使用方法】
・それぞれソースをコピペして拡張子を「.php」にして、これは「D:\phptest\」に保存します。
・それぞれのファイルパス、フォルダパスに不備がないようにします。アクセス権も注意!
・phpをコマンドプロンプトで実行します。 →例:「php D:\phptest\test.php」
【説明】
PHPファイルを実行すると、require_onceで「common1.php」をrequireします(え。
requireしたことで、「logging」関数を呼び出せるので、そこでログ処理をします。これで「[2019/04/14 14:44:48] test.php 起動」な感じでロギングが簡単にできます。
requireしたことで、「mysqlconnect」関数も呼び出せるので、クエリ文字列を渡すことで、SQLを実行してfetchしたデータを返す関数を実行します。
「'SELECT * FROM user WHERE id=2;'」はざっくり「userテーブルから*(全部)のカラムのデータをセレクトしゃがれ、あ、行はid=2のデータをな!」的な感じです。(こういうところで使う場合は*は良くないけど)
PDOはPHP標準の拡張機能の一つでデータベースとの接続を容易に行えるクラスのことです(参考文献参照)。
ここでは「define」でユーザ名とか対象スキーマ(DB)とかを定義しています。(defineは定数として定義するので、使用するときは「$」が要りません)
DB接続の方法は初心者にはなかなか難しいところですが、オプションとかをキチンと調べるとPDOを利用した接続に落ち着くので理解を頑張ってください(え
結果的に、mysqlconnect関数は二次元配列を呼び出し元へ返します。
そして最後にechoで標準出力に各値を出力します。
<実行イメージ>
【総評】
正直これだけの説明だとつまずくことも多いと思います。
PHPの設定は「php.ini」、MySQLの設定は「my.ini」をいじって、MySQLはとにかくDBやテーブルをいじってコマンドになれることしかないとおもわれます。
エラー内容からネットを検索すればなんとかなるはず。。だと思います。
これが上手くできるようになれば、会社のMySQLサーバからバッチで定期的にデータを好きなように取得して加工して、、とかが現実的になってきます。
【参考サイト】
PHP: エラーおよびエラー処理 - Manual