【问题标题】:swithing to php pdo, counting rows切换到 php pdo,计算行数
【发布时间】:2012-03-31 17:08:27
【问题描述】:

我目前正在将所有 sql 查询更新为 pdo,我将使用准备语句来防止 sql 注入攻击。到目前为止一切顺利,我现在被困在用 pdo 计算行数。 我尝试了以下操作:

 $sqlQuery = "SELECT COUNT(*) FROM News";
 $STIH = $DBH->query($sqlQuery);
 $rows_affected = $STIH->rowCount();
 echo($rows_affected); // returning result is 1, it should be 1038 

但是,当我使用这样的旧代码时

$query = "SELECT COUNT(*) AS numrows FROM News";
$result = mysql_query($query) or die('Error, query failed');
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];
echo ($numrows); // it return result which I expected which is 1038 rows.

我在这里缺少什么。 谢谢

【问题讨论】:

  • 为什么你会认为rowCountfetch_array 做同样的事情?!?
  • @tereško 认为?这是什么? PHP 与思考无关。它是关于将代码放在一起的。

标签: php pdo


【解决方案1】:

你越来越糊涂了。要获得 1038,您需要该行的结果。目前,您正在获取 SELECT COUNT 返回的行数,即 1 行,其中包含 1 个值。

【讨论】:

    【解决方案2】:

    使用$sth->fetchColumn() 抓取数据。

    $sqlQuery = "SELECT COUNT(*) FROM News";
    $STIH = $DBH->query($sqlQuery);
    $rows_affected = $STIH->fetchColumn();
    echo ($rows_affected);
    

    【讨论】:

      【解决方案3】:

      由于某种原因,您使用 PDO 获取的不是数据而是行数。
      只需像使用普通 mysql 一样使用 PDO 获取数据

      【讨论】:

        【解决方案4】:

        查询是返回一个标量,因为您使用的是COUNT()。由于它是一个标量,它只有一行,因此它返回 1。如果你想要行数,只需使用查询的结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-04
          • 1970-01-01
          • 1970-01-01
          • 2013-11-19
          • 1970-01-01
          • 2011-01-12
          • 2019-03-24
          相关资源
          最近更新 更多