问题描述
|
我有以下脚本无法正常运行,因为我期望它可以正常工作:
$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
在表1中,我只有1行,其中用户名是username1。如果发布的值为username1,则我希望$ strCount为1,但是由于某种原因,如果发布的值为username2,我仍将$ strCount设为1。
有人知道我在做什么错吗?
解决方法
你在数两次! count()和rowcount()。
PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。
尝试进行常规获取
$count = $db->query(\"select count(*) from table\")->fetch();
,您正在查询中执行COUNT(),这意味着您将只返回单行,其中包含记录计数的一个字段。
您必须检索该行和字段,然后根据该值进行决策。
,count(blah)将返回包含count值的一行。我认为您无需执行rowCount(),而是需要在执行并从那里读取值之后调用fetch(..)。这基于PHP文档。
http://www.php.net/manual/zh/pdostatement.fetch.php
我不是PHP开发人员,所以我不想给您不好的代码。