【问题标题】:Scripting a MySQL query in Unix using daemon in PHP使用 PHP 中的守护程序在 Unix 中编写 MySQL 查询脚本
【发布时间】:2010-10-28 22:12:25
【问题描述】:

我正在尝试在给定时间进行“at”工作,出于测试目的,我正在使用 $time 但这将是我从单独的 MySQL 查询中获得的日期时间。在命令行中我是这样的:

echo "mysql -e 'UPDATE admin SET row1=row2 WHERE id=1;'" | at now

我在 2010 年 10 月 28 日 15:05 得到了一份“工作 36”。在 PHP 中,我尝试过这样的操作:

exec("\"mysql -e 'UPDATE admin SET row1=row2 WHERE id=1'\" | at $time");

但是查询没有运行。更糟糕的是,我不知道发生了什么。

echo exec('whoami'); 

虽然返回“守护进程”。如何回显从 exec 命令得到的任何响应?理想情况下,我猜它会说“2010-10-28 15:05 工作 36”或类似的内容。

另外,我的目录中有一个 .my.cnf 文件,它指定了要使用的数据库、登录名和密码,守护进程是否也需要有一个文件才能正常工作?

[从答案中我可以看出我不清楚我要做什么。我需要

  • A.运行 mySQL 查询以获取日期/时间和 id
  • 乙。安排对在日期/时间匹配 id 的行进行更新

我已经完成了“A”并且在测试时使用“1”作为 id 和“now”。我会研究 PDO。

【问题讨论】:

    标签: php mysql daemon


    【解决方案1】:

    我对 at 命令不太熟悉,但它似乎有助于在特定时间运行命令。

    如果您尝试在 PHP 中编写预定脚本,有更好的方法可以做到这一点。只需编写一个 CLI 脚本并使用 cron 来安排它。正如 Svisstack 所指出的,如果您正在运行 MySQL 查询,请使用 PDO 等内置函数而不是系统命令。

    如果你只是运行系统命令,我不确定你为什么使用 PHP ;)

    【讨论】:

      【解决方案2】:

      你可能在safe_mode 吗?如果是,那么您的 | 将自动转义。根据manual

      启用安全模式后,命令 字符串被转义 转义shellcmd()。因此,回声 y |回声 x 成为回声 y \|回声 x。

      【讨论】:

      • 有了这个我可以回显我所做的,所以我认为是的,我处于安全模式,但查询仍然不起作用。
      【解决方案3】:

      您可以通过使用exec 命令的其他参数来获取更多信息。尝试运行它并查看输出。

      $output = array();
      $return = false;
      $last_line = exec("\"mysql -e 'UPDATE admin SET row1=row2 WHERE id=1'\" | at now", $output, $return);
      
      var_dump($last_line);
      var_dump($output);
      var_dump($return);
      

      另外,当你在命令行运行它时,你echo'ed MySQL 命令,但是当你把它放在 PHP 代码中时,它不再执行echo。我不确定这是否会有所不同,因为我不熟悉 at,但我认为我可以提供一些故障排除帮助。

      $last_line = exec("echo \"mysql -e 'UPDATE admin SET row1=row2 WHERE id=1'\" | at now", $output, $return);
      

      【讨论】:

        【解决方案4】:

        您的第二个语句/执行中缺少echo? (我宁愿使用popen / proc_open at $timefwrite 执行 at 的命令(之后关闭输入流,然后关闭程序。使用 atq 验证它是否工作,并注意当前使用可能被禁止at工作(通常在/etc/at.allow/etc/at.deny等文件中找到)

        【讨论】:

          猜你喜欢
          • 2012-08-30
          • 2012-10-25
          • 1970-01-01
          • 2010-10-06
          • 2011-05-03
          • 2013-05-27
          • 2014-06-28
          • 1970-01-01
          • 2017-07-01
          相关资源
          最近更新 更多