【问题标题】:How to effectively replace (mysql_result(mysql_query()) in PDO?如何在 PDO 中有效地替换 (mysql_result(mysql_query())?
【发布时间】:2012-06-10 10:22:38
【问题描述】:

由于我使用 PDO 而不是 mysql_* 命令重写 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;

那么问题是为什么即使 column 的 online=0 也总是返回 true?谢谢

【问题讨论】:

  • @tereško 所以在我的情况下它是 $rows = count(array(0)); ?
  • 拜托,去学php吧,不要盲目的复制粘贴代码
  • 在我的学习书中总是有 mysql_* 命令:(所以我正在尝试自己学习 PDO 和它的系统:) 我已经知道 count 从答案返回大数字所以我不明白你为什么把它贴在这里:)
  • @Byakugan:如果您发现有问题,请尝试定位错误。不只是笼统地问。但是,我可以理解,如果您更改为新内容,则很难找到错误点。但是,尽管如此,尝试找出错误是如何在调试中发生的“一点”,例如使用var_dump($results_login); 等。
  • OK thnk 你会的 :) 我只是认为它可能会发生在其他人身上,并且将来可能对某人有用:)

标签: php mysql pdo


【解决方案1】:

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

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

该数组上的count() 将始终生成1

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

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

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

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

然后:

if ($result_login['count'] > 0)

【讨论】:

  • 当我希望这是真正的行数时,我应该使用什么?例如,在每个帐户中查找多少次 online=1 并比较它们我应该使用什么?例如,当我在线搜索是否有超过 50 个帐户时,我应该使用什么检查功能来代替这个 mysql_result?
  • 你已经在SELECTCOUNT()。这将始终导致 one 行包含您想要的数据。这意味着您让数据库进行计数。另一种方法是简单地SELECT 所有行(没有COUNT()),然后使用rowCount 检查您获取了多少行。不过那是相当浪费的操作。
  • 如果我选择 SELECT * FROM 命令并想知道结果中的行数会怎样 - 我可以只使用 $result_login['*'] 吗?谢谢
猜你喜欢
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2018-09-19
  • 2017-06-20
  • 1970-01-01
相关资源
最近更新 更多