为什么{如果行存在然后获取它们}不起作用?

时间:2015-08-02 10:47:16

标签: php mysql pdo fetch

我想首先检查 {if row exists} ,然后检查结果fetch。这是我的代码:

$id = 102;

// connecting to database here
$sth = $dbh->prepare('SELECT * FROM users WHERE id = ?');
       $sth->execute(array($id));
       $num_rows = $sth->fetchColumn();

  // if exist
  if($num_rows){

       // then fetch
       while($end = $sth->fetch())
       {
           echo $end['id'];
       }

  }

但输出是空白的,为什么?

应该注意,数据库中存在id = 102的行。

2 个答案:

答案 0 :(得分:1)

据我所知,你只有一行有这个ID。你可以使用fetch():

$id = 102;

// connecting to database here
$sth = $dbh->prepare('SELECT * FROM users WHERE id = ?');
$sth->execute(array($id));
$row = $sth->fetch();

// if record exist
if ($row) {
     var_dump($row);
     die();
}

答案 1 :(得分:0)

PDO也有类似的方法rowCount,但在某些情况下会返回受影响的行。

从PHP手册引用

  

对于大多数数据库,PDOStatement :: rowCount()不返回   受SELECT语句影响的行数。相反,使用   PDO :: query()发出带有相同的SELECT COUNT(*)语句   将谓词作为预期的SELECT语句,然后使用   PDOStatement :: fetchColumn()来检索将要的行数   被退回然后,您的应用程序可以执行正确的操作。

根据建议,您可以查询,计算并继续

$id = 102;

// connecting to database here
$sth = $dbh->prepare('SELECT COUNT(*) FROM users WHERE id = ?');
       $sth->execute(array($id));
       $num_rows = $sth->fetchColumn();

// if exist
if($num_rows > 0){

    $sth = $dbh->prepare('SELECT * FROM users WHERE id = ?');
  $sth->execute(array($id));

    // then fetch
    while($end = $sth->fetch())
    {
         echo $end['id'];
    }
}