PHP:使用count()获得1而不是0

时间:2018-08-25 06:41:40

标签: php mysql sql database backend

我正在为我的网站添加一个计数器。 在代码中,我检查是否存在带有帖子ID的IP。

例如,当发布ID为26,并且我的IP表中没有ID为26的IP时,它应该返回0,但返回1。

<ion-header>
  <ion-navbar color="danger">
      <ion-buttons start>
        <button ion-button icon-only menuToggle>
          <ion-icon name="menu">

          </ion-icon>
        </button>
      </ion-buttons>
  </ion-navbar>


<ion-menu [content]="content">
    <ion-content padding>
        this is awkmal
    </ion-content>
</ion-menu>


</ion-header>
<ion-nav #content></ion-nav>

6 个答案:

答案 0 :(得分:5)

假设您正在使用PDO

在这里,您使用准备好的语句来查询数据库,但没有获取数据库返回的结果

使用

$result = $checkIp->setFetchMode(PDO::FETCH_ASSOC);
if(count($result) > 0){
  .............
}
else{
  ..........
}

使用起来更简单

$checkIp->rowCount()

这将返回您的查询所影响的行数

答案 1 :(得分:2)

$checkIp->execute();始终返回布尔值,因此这里的条件是错误的。检查文档http://php.net/manual/en/pdostatement.execute.php像这样使用

$userIp = $_SERVER['REMOTE_ADDR'];
$checkIp = $db->prepare("SELECT user_ip FROM user_ip WHERE word_id = '$idToShow'");
$result=$checkIp->execute();
if (!$result) {
    echo count($checkIp);
    echo " ". $idToShow;
}else {
    $insertIP = $db->prepare("INSERT INTO user_ip (user_ip, word_id) values('$userIp', '$idToShow')");
    $insertIP->execute();
    $updateView = $db->prepare("UPDATE words set views = views + 1 WHERE id = '$idToShow'");
    $updateView->execute();
}

答案 2 :(得分:2)

execute()方法运行查询将返回布尔值,以指示查询是否成功。 您可以使用rowsCount()对行进行计数,也可以fetchAll()然后对结果进行计数。

您应该使用类似的东西

$checkIp->execute();
if ($checkIp && $checkIp->rowsCount() > 0) {
    // ...
}

OR

$checkIp->execute();
$ips = $checkIp->fetchAll();
if (count($ips) > 0) {
    // ...
}

http://php.net/manual/en/pdostatement.execute.php
http://php.net/manual/en/pdo.prepare.php

答案 3 :(得分:1)

代替此

if (count($checkIp) > 0)

使用

if(isset($checkIp->user_ip) && !empty($checkIp->user_ip))

答案 4 :(得分:1)

与PHP doc一样,执行retunr TRUE或False

$checkIp->execute(); 

所以您的

(count($checkIp)   

仅计算在这种情况下contai只是一个值的var内容

答案 5 :(得分:1)

$checkIp是一个对象,并且会始终(假设您的准备工作成功)返回非零计数。您想要的(假设您正在使用mysqli)是$checkIp->num_rows。如果您使用的是PDO,则需要$checkIp->rowCount()