计数方法sql类在php中不起作用

计数方法sql类在php中不起作用,php,sql,class,Php,Sql,Class,我试图使用一个对象来计算数据库中满足某些条件的记录数,但我无法确定如何使其工作。以下代码是我的db连接类中的计数方法: //Counts the total number of records and returns integer public function totalCount($fieldname, $tablename, $where = "") { $q = "SELECT count(".$fieldname.") FROM " . $tablename . "

我试图使用一个对象来计算数据库中满足某些条件的记录数,但我无法确定如何使其工作。以下代码是我的db连接类中的计数方法:

//Counts the total number of records and returns integer
public function totalCount($fieldname, $tablename, $where = "") 
{
    $q = "SELECT count(".$fieldname.") FROM "
    . $tablename . " " . $where;

    $result = $this->mysqli->query($q);
    $count = 0;

    if ($result) {
        while ($row = mysqli_fetch_array($result)) {
            $count = $row[0];
        }
    }
    return $count;
}
此代码在类外:

 //New instantiation
 $mydb = new myDBC();

 //Count the number of transactions for the user...
 $count = $mydb->totalCount('amount','transactions','WHERE userid = 13');

 //output the number of transactions for the user
 print $count;
出于某种原因,它总是显示0,即使我的数据库中有数千条应该计数的记录。感谢大家指点我的语法哪里不对


谢谢

此方法是为所有表/字段返回零,还是仅为您测试的表/字段返回零

$mydb->totalCount('amount','transactions','WHERE userid=13')


计数
仅计数
非空
值。要对所有记录进行计数,请将星号传递给
count
函数:
count(*)
查询执行返回false,如果条件是count始终为零,则它不会进入内部,您可以使用prepared语句准备查询,然后执行它。而且,我不认为必须将字段作为参数传递给
COUNT

无论如何,根据你的问题,这将是一个更好的查询

$q = 'SELECT COUNT( * ) FROM ' . $strTable . ' WHERE ' . $strCond;

同样,由于您使用的是MySQLi,使用。

我发现很有趣的一点是,您要求界面的用户通过WHERE子句传递
WHERE
标识符。我试图使其足够开放,以便允许GROUP BY等。我可能会在更长的时间内进一步开发它,但我对PHP中的OOP非常陌生,因此我尝试先学习。。如果我走错了方向,请纠正我!我可能会为
groupby
have
orderby
添加额外的参数,因为它们具有不同的功能。您可以为这些参数设置默认值,并检查界面的用户是否实际传递了任何内容。不过,这次讨论有点离题。有道理!一旦我完成了这项工作,我就会这样做——更好的办法是创建一个SQL语句类,它封装了SQL语句的所有这些不同部分。然后将其传递给totalCount函数。您应该看看PHP的
PDO
对象。它已经是处理数据库的面向对象接口。你可以包装/扩展它来添加你想要的功能。谢谢-解决了它。。。帮助我发现了一个粗心的拼写错误:/