MySql事件调度器调用PHP脚本

MySql事件调度器调用PHP脚本,php,mysql,daemon,Php,Mysql,Daemon,我第一次玩MySql事件。这里是事件 DELIMITER $$ CREATE EVENT testEvent ON SCHEDULE EVERY 1 minute STARTS '2014-01-01 03:00:00' DO BEGIN /* INSERT INTO test(text) VALUES ('text');* <- THIS WORKS JUST FINE */ SET @exec_var = sys_exec('c:\wamp\bin\php\php5.

我第一次玩MySql事件。这里是事件

DELIMITER $$
CREATE EVENT testEvent
ON SCHEDULE EVERY 1 minute STARTS '2014-01-01 03:00:00' 
DO BEGIN
  /*
  INSERT INTO test(text) VALUES ('text');* <- THIS WORKS JUST FINE
  */
  SET @exec_var = sys_exec('c:\wamp\bin\php\php5.4.12\php c:\mySite\testit.php');
END $$
DELIMITER;

不要这样做。MySQL事件,因为所有其他类型的存储例程(触发器、函数和过程)都不用于调用外部进程。相反,存储例程的全部要点是保持所有数据库处理与外界隔离

即使你可以从技术上做到这一点,但这并不意味着这是一件正确的事情。您的示例代码是一个很好的例子,说明它毫无意义。您启动一个php只是为了连接回数据库,并插入一行,您只需在事件本身中发出insert即可轻松完成

如果您需要定期运行php脚本,请使用专门为该脚本设计的工具--OS调度器--cron或Windows任务调度器

另一方面,如果您的脚本所做的全部工作都是处理数据库中的数据,并且除了通过build-it语句(如
加载数据
选择到输出文件
)之外,不需要与操作系统进行任何交互,只需在事件中正确地执行即可

此外,使用
sys\u exec
UDF对您的数据库实例来说是一个巨大的安全隐患!如果您没有阅读或忘记,这里是图书馆文档中的注意事项

在决定是否需要此功能时要非常小心。自定义项是 可供所有数据库用户使用-您不能授予执行权限 为了他们。因为传递给sys_exec的commandstring可以做很多事情 任何事情,暴露函数都会带来非常真实的安全隐患

即使是一个善良的用户,也可能意外地做很多事情 用它来破坏。调用将以的权限执行 运行MySQL的os用户,因此删除MySQL的 数据目录,或者更糟

该函数用于专门的MySQL应用程序,其中 需要对操作系统进行扩展控制。目前,我们没有 具有ftp、电子邮件和http的自定义项,此功能可用于 在确实需要的情况下实现这样的功能 (例如,数据仓库暂存区域就是一个例子)

你已经被警告了!如果你看不到危险,请不要试图 找到它;请相信我。

如果您决定在生产环境中使用此库,请 确保只能运行特定命令,并且文件访问受到限制 通过使用AppArmor


不要这样做。MySQL事件,因为所有其他类型的存储例程(触发器、函数和过程)都不用于调用外部进程。相反,存储例程的全部要点是保持所有数据库处理与外界隔离

即使你可以从技术上做到这一点,但这并不意味着这是一件正确的事情。您的示例代码是一个很好的例子,说明它毫无意义。您启动一个php只是为了连接回数据库,并插入一行,您只需在事件本身中发出insert即可轻松完成

如果您需要定期运行php脚本,请使用专门为该脚本设计的工具--OS调度器--cron或Windows任务调度器

另一方面,如果您的脚本所做的全部工作都是处理数据库中的数据,并且除了通过build-it语句(如
加载数据
选择到输出文件
)之外,不需要与操作系统进行任何交互,只需在事件中正确地执行即可

此外,使用
sys\u exec
UDF对您的数据库实例来说是一个巨大的安全隐患!如果您没有阅读或忘记,这里是图书馆文档中的注意事项

在决定是否需要此功能时要非常小心。自定义项是 可供所有数据库用户使用-您不能授予执行权限 为了他们。因为传递给sys_exec的commandstring可以做很多事情 任何事情,暴露函数都会带来非常真实的安全隐患

即使是一个善良的用户,也可能意外地做很多事情 用它来破坏。调用将以的权限执行 运行MySQL的os用户,因此删除MySQL的 数据目录,或者更糟

该函数用于专门的MySQL应用程序,其中 需要对操作系统进行扩展控制。目前,我们没有 具有ftp、电子邮件和http的自定义项,此功能可用于 在确实需要的情况下实现这样的功能 (例如,数据仓库暂存区域就是一个例子)

你已经被警告了!如果你看不到危险,请不要试图 找到它;请相信我。

如果您决定在生产环境中使用此库,请 确保只能运行特定命令,并且文件访问受到限制 通过使用AppArmor


非常感谢。是的,这个例子毫无意义,但它只是一个例子。我真正需要做的是非常不同的。“目前,我们没有ftp、电子邮件和http的自定义项,如果确实需要,可以使用此功能实现此类功能。”。我需要这些功能,而且sys_exec调用中没有任何变量可供任何人操作。那么,在这种情况下怎么会有安全风险呢?基本上只是希望它每分钟运行一个脚本。脚本将处理所有其他内容。还不值得做吗?UDF对所有数据库用户都可用。你不能限制对它的访问。它是在运行mysql的系统帐户的安全上下文中调用的。至少任何用户都可以删除数据库实例和mysql本身中的所有数据文件。所需要的只是一个db conn
try
{
    $dbh = new PDO("mysql:host=********;dbname=********", ********, ********);
    $dbh->setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true );
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
catch(PDOException $e) { echo $e->getMessage(); }

$q1 = $dbh->prepare("INSERT INTO test(text) VALUES ('text')");
$q1->execute();