PHP MySQL 执行命令不起作用

标签 php mysql exec

我在下面编写了这段代码,它查看客户端是否处于某种状态,如果具有特定值则退出。我已经测试了查询和 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 语句,请了解为什么此命令不起作用以及输出为空的原因。

最佳答案

查看exec函数的签名:

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

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

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

关于PHP MySQL 执行命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18184126/

相关文章:

php - Facebook 应用程序用户报告错误的 ssl 但我们无法复制

php - 从 mysql 更改为 mysqli

mysql - 如何获取每行SQL中特定值出现的次数

MySQL Week 函数意外结果

php - 进行迁移时如何创建 float 但不加倍的字段?

php - MySQL 连接两个表

MySQL CREATE TEMPORARY TABLE 错误

c - 为什么我们在 `execlp` 中双重声明可执行文件名称?

java - 需要使用 sudo 用户执行脚本文件 - 从 teamcity 运行

linux - 使用绝对路径覆盖 exec 系统调用