1
$sql = "SELECT # FROM users WHERE onduty = 1 AND loc_id = '{$site}';"; 
$result = mysql_query($sql);

これが真か偽かをテストしたいだけです。0 行が返された場合、次の行は次のようになります。

if (!$result) { //do this; }

ただし、私のテストでは、それが真であるべきだとわかっているときに偽になっています。これは健全なロジックですか?

(注、はい、使用する必要があることはわかってmysqli_queryいますが、ここで求めているのはそれではありません)**

回答:これは私が使用したものです:

$login_state = false;
if(mysql_num_rows(mysql_query("SELECT 1 FROM users WHERE onduty = 1 AND loc_id = '{$site}';"))) {
    $login_state = true;
}
4

2 に答える 2

6

使用EXISTS:

SELECT EXISTS (SELECT 1 FROM users WHERE onduty = 1 AND loc_id = '{$site}') AS test;

条件に一致する行が見つからない場合、元のクエリは「行なし」を返します。これは毎回TRUE( 1) またはFALSE( ) を返します。0

基準に一致する複数の行が存在する可能性があり、少なくとも 1 つの行が存在するかどうかのみに関心がある場合、 のパフォーマンスはEXISTS単純なクエリよりも優れています。最初の行が見つかるとすぐに停止し、 または のみを返し0ます1

ここでdb<>fiddle
古いsqlfiddle

于 2012-12-09T04:37:01.100 に答える
3

mysql_num_rows()を使用して、クエリの実行時に返される行数を確認します。

$num_rows = mysql_num_rows($result);

if($num_rows==0)
{
//nothing returned
}
else
{

//rows returned
}

対応する mysqli 実装については、mysqli_stmt_num_rows()を参照してください。

于 2012-12-09T04:47:08.127 に答える