2012-01-22 96 views
4

这里有很多问题,我做了大量的研究。不过,我仍然想知道我是否正在做这件事。PHP PDO mysql计数行返回

这里是我的发言(我已经简化它):

try { 
     $stmt = $pdc_db->prepare("SELECT * FROM table WHERE color = :color"); 
     $stmt->bindValue(':color', $selected_color); 
     $stmt->execute(); 
     $color_query = $stmt->fetchAll(); 
    } catch(PDOException $e) { catchMySQLerror($e->getMessage()); } 

现在,我使用下面,看看这已返回任何结果:

if (count($color_query) > 0) { 

这工作。然而... SELECT语句只会返回一个结果。所以现在要访问结果中的东西,我使用$ color_query [0] [colorname]。我知道这是因为我使用fetchAll(),但我真的想要使用fetch()但是如果我只是使用fetch(),我失去了执行count()的能力,这很漂亮对我来说很简单。我知道我可以做一个单独的查询,并检查SELECT COUNT(*)的结果,但这似乎更多的工作(为每个设置两个单独的查询)

必须有一种方法,在mySQL中使用PDO ,检查fetch()是否返回结果?

+0

没有理由使用取指取代fetchall –

回答

4

$stmt->rowCount()执行()后,但不能与所有数据库一起工作...尝试使用MySQL,看看你得到什么。

+1

哇,这实际上工作。在我搜索的大多数地方中,rowCount()都不能用于mySQL,所以我从不打扰。 – phpmysqlguy

+1

rowCount()是否工作取决于基础数据库驱动程序是使用实际游标还是仅返回缓冲的所有结果。 MySQL大部分都是后者。 –

+1

感谢您的信息。我想这里真正的教训是不要假设rowCount()将不起作用。它在我使用mysql的情况下适用于PHP PDO。希望这可以节省别人一些时间。 – phpmysqlguy

0

你可以用fecth来做,fecth如果没有结果的话会返回false。

if ($row = $stmt->fetch()) { 
    //get the first row of the result. 
    //.... 
} 
+1

有时你必须知道在开始循环之前是否有结果。 –

+0

@ Col.Shrapnel他只需要结果的第一行,不需要循环。 – xdazz

+0

好吧,我重新读这个问题,它可能是这样的。然而,这是相当不明确的。 –