やりたいこと
毎時間特定の内容をlocalhost上のMYSQLにwindowsタスクスケジューラーの機能を利用して、"INSERT INTO"を実行したいと考えております。
[環境]
OS:windows10
php:7.3.7
ローカルサーバ:MAMP
実行するPHPファイルは以下の通りです。
php
1<?php 2$dsn = 'mysql:dbname=test;host=localhost;charset=utf8'; 3$user = 'root'; 4$password = 'root'; 5$today = date("Y-m-d H:i:s"); 6 7try { 8 $pdo = new PDO($dsn, $user, $password); 9 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 10 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 11} catch (PDOException $e){ 12 echo $e->getMessage(); 13 file_put_contents("error.txt", "({$today})error_1".$e->getMessage());//here_2 14 exit(); 15} 16 17$pdo->beginTransaction(); 18try{ 19 $user = "dummy"; 20 $status = 1; 21 22 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 23 $sql ="INSERT INTO master_table (user,status) VALUES (?,?)"; 24 $stmt = $pdo -> prepare($sql); 25 $stmt->bindValue(1,$user,PDO::PARAM_STR); 26 $stmt->bindValue(2,$status,PDO::PARAM_STR); 27 $stmt->execute(); 28 $pdo->commit(); 29 echo 123; 30 file_put_contents("success_log.txt","({$today}) success".PHP_EOL,FILE_APPEND);//here 31}catch(PDOException $e){ 32 33 $pdo->rollBack(); 34 echo $e->getMessage(); 35 file_put_contents("error.txt", "({$today})error_2".$e->getMessage()); 36 exit(); 37} 38?>
こちらのファイルはブラウザで実行すると、//here
まで適切に実行できていることは確認しております。
発生している問題
さて、上記のファイルをタスクスケジューラーに以下の通り、登録をして実行させようとしたところfile_put_contents("error.txt", "({$today})error_1".$e->getMessage());//here_2
となり、タスクスケジューラーでは実行できないことが判明いたしました。
- トリガー:毎日10:40:00に実行 状態有効
- 操作:
- プログラム: C:\MAMP\bin\php\php7.4.1\php.exe
- 引数の追加: test_2.php
- C:\MAMP\htdocs\test\
- 実行した結果、履歴に2021/9/14 10:40:01で実行された痕跡を確認
ここでfile_put_contents("error.txt", "({$today})error_1".$e->getMessage());//here_2
の出力結果をみると以下の通り、PDO接続時点で問題が発生していることがわかりました。
(2021-09-14 01:40:01)error_1could not find driver
ご質問
ブラウザでは問題なく実行できるがタスクスケジューラーの場合、上記のような問題がなぜ発生するかわからずどのように設定すればよいのか(タスクスケジューラーの操作の問題なのか?PHPファイルをタスクスケジューラー用に何か書き換えなければならないのか)お尋ねをさせてください。
上記の切り分けの結果、PHPファイルを実行すること自体は問題はないのですが、MYSQL(PDO)の操作をする場合には単純にスケジューラーでキックしても実行できない特別な理由があるのかと推察しております。
宜しくお願いいたします
【備考】
前回の投稿で問題の所在や切り分けが曖昧になってしまい趣旨が伝わりずらくなってしまったため、再掲とさせていただきました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。