2016-08-07 6 views
2

MySQLでイベントを作成しました。彼らは働いていますが、実行するためには、私はSUPER特権なしでMySQLでイベントを実行する(?)

SET event_scheduler = ON;が必要です。

これを行うには、私はSUPER特権を取得する必要があります。 GRANT SUPER ON *.* TO [email protected]'localhost' IDENTIFIED BY 'password';と別のエラーを取得::私はスーパー付与しようとする

Access denied; you need (at least one of) the SUPER privilege(s) for this operation

:私は次のエラーを取得する

ERROR 1045 (28000): Access denied for user

を私は自分のホストに連絡している、と彼らは彼らのホストが共有されているので、彼らがいたことを言いました私のアカウントのスーパー特権を追加できません。

誰かが別の方法を見つける手助けをすることができますので、イベントが実行され始めますか?アカウントは私のものではないので、ホストを切り替えることはできません。

+0

スーパー特権を許可する別のホストを取得しますか? PHPでcronジョブを作成しますか? – FrankerZ

+0

ホスティングプロバイダがイベントスケジューラを有効にしない限り、これを実現させる別の方法はありません。 –

+0

@FrankerZ PHPに「cron」が存在することは知らなかった。たくさん助けてくれました。 –

答えて

0

共有ジョブでは、Cronジョブが最適です。 cPanelへのアクセス権があれば、人生を楽にするでしょう。

最初のもの:まずスクリプトを作成します。これは、データベースにアクセスすることができます、電子メールを送信する、ほとんど何かを行う必要があります。 $_GET,$_POST,$_REQUEST、および$_COOKIEは、ウェブリクエストではないため、スクリプトの実行中は使用できなくなります。クッキーを設定したり、リモートユーザーに関する情報を表示することはできません(存在しないため)。しかし、を使ってコマンドラインで変数を渡すことはできます。詳細については、this postを参照してください。

このサンプルスクリプトはto_be_mailedテーブル内のすべてのユーザーにニュースレターを送信します:あなたは、通常の出力へのアクセスを持っていないよう

<?php 

include('db.cfg.php'); 
include('newsletter.php'); 

$body = get_newsletter(); 

$result = $db->query("SELECT * FROM to_be_mailed"); 

while ($row = $result->fetch_row()) 
{ 
    mail($row['email'], 'Nightly news update!', $body); 
} 

//Probably want to update the database again and set them all to sent. 

echo 'Done sending emails!'; 

デバッグスクリプトは、困難な場合があります。 this answerを見て、スクリプトが正常に実行されるようにerror_logsを有効にしてください。

cPanel's Cron Jobsを使用すると、実行終了時に出力を電子メールで送信することで、より簡単に作業できます。これにより、バグを追跡しやすくなり、cronジョブが正常に実行されるようになります。

次はあなたのcronジョブを追加:

  • は、cPanelのは、ホストを有効にするためにcronジョブを追加する方法についての情報のためcPanel's Cron Jobsを参照してください。
  • cpanel以外のホスト:See this post。あなただけのを初めてしている場合
# crontab -e 
    00 * * * * /usr/local/bin/php /home/USERNAME/myscript.php 
  • :要点はあなたが(これはエディタを開き、次の行に追加します)タスクを追加しcrontab -eを使用して、ありますcron構文、this siteは本当に素晴らしいです。例を示し、構文を助け、実行したいスケジュールを理解するのに役立ちます。
関連する問題