0

mysql_*コマンドの代わりに PDO を使用して Web を書き換えるプロセスがほぼ完了したので、変更した機能をテストしています。そして、私の変更された関数はmysql_result(mysql_query()常にtrueを返すようですが、それはなぜですか? 元のコードと変更されたコードを見てみましょう:

if (mysql_result(mysql_query("SELECT COUNT(*) FROM account WHERE id='".$_SESSION["user_id"]."' AND online=1"), 0)>0)
{
  return true; 
}
else
  return false;

ここでコードを変更しました:

$stmt = $db_login->prepare("SELECT COUNT(*) FROM account WHERE id=:id AND online=1");
$stmt->bindValue(':id', $_SESSION["user_id"], PDO::PARAM_INT);
$stmt->execute();
$results_login = $stmt->fetch(PDO::FETCH_ASSOC);
$rows = count($results_login);
if ($rows > 0)
{
  return true; 
}
else
  return false;

では、列が online=0 の場合でも常に true を返すのはなぜですか? ありがとうございました

4

1 に答える 1

1

$stmt->fetch結果セットから1 行をフェッチします。そこから得られるのは、次のような、選択されたすべての列を含む配列です。

array(
    'COUNT(*)' => 42
)

count()その配列の Aは常に になり1ます。

フェッチされた行の内容を確認する必要があります。

if ($result_login['COUNT(*)'] > 0)

この列をより適切な名前にエイリアスすることをお勧めします。

SELECT COUNT(*) AS `count` ...

それで:

if ($result_login['count'] > 0)
于 2012-06-10T10:30:55.247 に答える