0

我在下面编写了这段代码,它查看客户端是否处于某个状态,然后如果它具有某个值则退出。我已经测试了查询和 syslog 传入的所有变量,以确保它们不为空,但是 exec 命令的返回值为 1。并且 $out 为空。

exec('/usr/bin/mysql --defaults-extra-file=database-user.cnf my_db -e "SELECT client_state FROM my_table WHERE transfer_id = '.$transfer_id.' AND client_id = '.$cid.'"', $out, $ret);

if($out == 15)
{
    syslog(LOG_INFO, "Transfer to client ".$client->getName()." has already been completed on this transfer")
    exit(EXIT_OK);
}

因为输出是空的,所以它跳过了我的 if 语句,任何想法为什么这个命令不起作用以及为什么输出是空的。

4

1 回答 1

1

查看exec函数的签名:

string exec ( string $command [, array &$output [, int &$return_var ]] )

$out变量(如果您的命令正确)将是一个数组,即使只有 1 个输出行,它仍然是一个数组。
要知道您的命令是否成功执行,您必须检查$ret变量的值。如果它不是零,那么无论你执行什么都不会顺利运行。程序返回 0 标记干净退出。

但是,我一生都无法理解您为什么要费心执行这样的查询。如果你已经mysql运行,并且你已经安装了 php,为什么不使用mysqli_*orPDO呢?它会为您节省很多麻烦,并且会提高脚本的性能和安全性。

于 2013-08-12T10:06:14.413 回答