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_*またはを使用しないのはなぜPDOですか? 面倒な作業が大幅に軽減され、スクリプトのパフォーマンスと安全性の両方が向上します。

于 2013-08-12T10:06:14.413 に答える