2

動きが存在するかどうかを確認し、true または false を返すはずのこのクエリがあります。このクエリ

function movement_performed_today($class_id, $client_id){
$class_id = (int)$class_id;
$client_id = (int)$client_id;



$query = mysql_query("SELECT COUNT(`movement`) FROM `completed_movements` WHERE `class_id` = '$class_id' AND `client_id` = '$client_id' AND `date` = CURDATE()");

$movement_performed = mysql_fetch_assoc($query);

$return = (mysql_result($movement_performed, 0) == 1) ? true : false;   
    var_dump ($return);
}

戻り値:

bool(false) 
bool(false)

このコードを置き換えると:

$return = result(mysql_result($movement_performed, 0) == 1) ? true : false; 
    var_dump ($return);

これとともに:

print_r ($movement_perfomed);

戻り値:

Array ( [COUNT(`movement`)] => 2 ) 
Array ( [COUNT(`movement`)] => 3 )

これらの数値はゼロ以外のものなので、true を返す必要があると考えるのは完全に間違っていますか?

4

2 に答える 2

7

あなたの質問に答えるには:

mysql_resultエラーで戻りFALSEます。の関数シグネチャmysql_fetch_assocで必要とされるように、mysql リソースの代わりにから配列を渡しています。mysql_result

string mysql_result ( resource $result , int $row [, mixed $field = 0 ] )

したがってFALSE、エラーがあるため返されます。


より良い方法:

// Change
$movement_performed = mysql_fetch_assoc($query);
$return = result(mysql_result($movement_performed, 0) == 1) ? true : false;

// to
$movement_performed = mysql_fetch_row($query);
return $movement_performed[0] > 0;

これは count ステートメントの結果を取得し、それを> 0チェックします。> 0チェックは実際には必要ありませんが、真実の値に依存するのではなく、意図を示すのに役立ちます。


補足:mysql_*関数は廃止されました。MySQLiまたはを使用するようにコードを移行する必要がありますPDO。残念ながら、多くの関数がリソースmysql_*を必要としないという事実を利用しています。mysql一連の関数を変更したり、グローバル変数を宣言したりする必要があるため、コードの移行は面倒です。前者のオプションをお勧めしますが、修正には多くの労力が必要です。

于 2012-08-29T15:28:53.730 に答える
0

そうあるべきだと思う

(count(mysql_fetch_assoc ) >0 ) ? true : false; 

それよりも

result(mysql_result($movement_performed, 0) == 1) ? true : false; 
于 2012-08-29T15:21:03.217 に答える