SQL/PHP回显计数返回0,即使包含内容
不知何故,我的计数输出为0,即使我有4行符合SQL计数中的条件。为了方便起见,我将$usrcustomerid设置为110以检查数字。my count只有以下条件:如果它处于挂起状态并且与usrcustomerid匹配 我的“订单”表 orders.phpSQL/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']; ?> <?
<?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
子句。