0

由于我使用 PDO 而不是命令重写 web 的过程几乎完成了,mysql_*我现在正在测试我更改的函数。而且似乎我更改的函数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;

那么问题是为什么即使列在线= 0,它也总是返回true?谢谢

4

1 回答 1

1

$stmt->fetch从结果集中获取一行。你从中得到的是一个包含所有选定列的数组,看起来像这样:

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

该数组上的 Acount()将始终导致1.

您需要检查提取行的内容:

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

最好将此列别名为更好的名称:

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

然后:

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