SQL/PHP回显计数返回0,即使包含内容

SQL/PHP回显计数返回0,即使包含内容,php,sql,Php,Sql,不知何故,我的计数输出为0,即使我有4行符合SQL计数中的条件。为了方便起见,我将$usrcustomerid设置为110以检查数字。my count只有以下条件:如果它处于挂起状态并且与usrcustomerid匹配 我的“订单”表 orders.php <?php session_start(); require_once('orders-claimed.vc.php'); echo $lstCountPending['count_pending']; ?> <?

不知何故,我的计数输出为0,即使我有4行符合SQL计数中的条件。为了方便起见,我将$usrcustomerid设置为110以检查数字。my count只有以下条件:如果它处于挂起状态并且与usrcustomerid匹配

我的“订单”表

orders.php

<?php
 session_start();
 require_once('orders-claimed.vc.php');
 echo $lstCountPending['count_pending'];
?>
<?php

  $routePath = "../";

  require_once($routePath . "_config/db.php");
    $dbConfig = new config_db();
    $db = $dbConfig->init();

  require_once($routePath . "_mc/Order.mc.php");
  $mcOrder = new Order_MC();

  $usrcustomerid = 110;
  $lstCountPending = $mcOrder->SelectCountPending($db, $usrcustomerid);
  $lstCountPending['count_pending'] = count($lstCountPending);
  public function SelectCountPending($db, $usrcustomerid) {
   $stmt = $db->prepare(
     " SELECT usrcustomerid AS count_pending, status
       FROM order
       WHERE status = 'PENDING'
       AND usrcustomerid = $usrcustomerid "
   );
   $stmt->execute();
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
   return $rows;
  }

如果需要行数,应使用COUNT(*)

不管怎么说,您都面临着sqlinjection的风险。。为了避免这种情况,您应该查看prepared语句和binding参数 在本例中,假设您的
usrcustomerid
是一个可以使用的整数

 public function SelectCountPending($db, $usrcustomerid) {
   $stmt = $db->prepare(
     " SELECT count(*) AS count_pending, status
       FROM order
       WHERE status = 'PENDING'
       AND usrcustomerid = $usrcustomerid "
   );
   $stmt->bindParam(1, $usrcustomerid , PDO::PARAM_INT);
   $stmt->execute();
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
   return $rows;
  }

您不需要提取
状态
列,因为您已经将其筛选为始终为
'PENDING'

public function SelectCountPending($db, $usrcustomerid) {
   $stmt = $db->prepare(
     " SELECT usrcustomerid AS count_pending
       FROM order
       WHERE status = 'PENDING'
       AND usrcustomerid = $usrcustomerid "
   );
   $stmt->execute();
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
   return $rows;
  }
您可以获取所有行并使用PHP对其进行计数

public function SelectAllPending($db, $usrcustomerid='' /*optional parameter*/) {
      $condition = $usrcustomerid ? " AND usrcustomerid = $usrcustomerid " : '';

      $stmt = $db->prepare(
        " SELECT *
          FROM order
          WHERE status = 'PENDING'
          $condition"
      );
      $stmt->execute();
      $rows = $stmt->fetchAll();

      return $rows;
  }

$pendings = SelectAllPending();
$numPendings = count($pendings);
你试试看 字符串中的{$variable}

public function SelectCountPending($db, $usrcustomerid) {
   $stmt = $db->prepare(
      " SELECT usrcustomerid AS count_pending, status
       FROM order
       WHERE status = 'PENDING'
        AND usrcustomerid = {$usrcustomerid} "
   );
   $stmt->execute();
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
   return $rows;
  }

您正在计算或显示行吗?在分配任务之前,
var\u dump($lstCountPending)
的输出是什么
$lstCountPending['count\u pending']=count($lstCountPending)?除了计数问题,为什么不使用
和usrcustomerid=?
占位符并使用
->$stmt->execute([$usrcustomerid])
您已经在使用准备好的语句api,请正确使用它,不要直接向语句中注入变量。您正在选择
usrcustomerid
并“重命名它
count\u pending
。我假设您确实希望
count(*)作为count\u pending
并在查询中添加
GROUP BY usrcustomerid
子句。