从数据库返回计数

时间:2011-04-15 18:45:26

标签: php mysql pdo

我有以下脚本无效,因为我希望它能够正常工作:

$DBH = new PDO( "mysql:host=localhost;dbname=database_name", "user", "pass" );
$DBH -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$STH = $DBH -> prepare( "select count( users_id ) from table1 where username = :username" );

$STH -> bindParam( ':username', $_POST['username'], PDO::PARAM_STR, 100 );

$STH -> execute();

$strCount = $STH -> rowCount();

if( $strCount == 1 ) {
    echo $strCount;
    echo "user has already registered, do nothing";
} elseif ( $strCount == 0 ) {
    echo $strCount;
    echo "user has not registered, insert into db";
} else {
    echo $strCount;
    echo "something is wrong, should only ever be 0 or 1";
}

似乎总是为$ strCount

返回1

在table1中,我只有1行,其中用户名是username1。如果发布的值是username1,那么我希望$ strCount为1,但由于某种原因,如果发布的值是username2,我仍然将$ strCount作为1。

任何人都知道我做错了什么?

3 个答案:

答案 0 :(得分:1)

你正在做两次计数! count()和rowcount()。 PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。

尝试进行regualr fetch

$count = $db->query("select count(*) from table")->fetch(); 

答案 1 :(得分:1)

你在查询中做了一个COUNT(),这意味着你只会返回一行,只有一个字段,包含记录的数量。

您必须检索该行和字段,然后根据该值做出决定。

答案 2 :(得分:0)

count(blah)将返回带有count值的单行。而不是调用rowCount(),我认为你需要在执行并从那里读取值后调用fetch(..)。这是基于PHP文档。

http://www.php.net/manual/en/pdostatement.fetch.php

我不是PHP开发人员所以我不想给你错误的代码。