MySQL PDO - $ sth-> fetch()返回FALSE,但只是第二次?

时间:2012-06-14 23:34:06

标签: php mysql oop pdo

以下是我的应用程序的代码片段。请记住,我对PDO非常非常新(就像今天开始计算它一样)所以我有点困惑。

现在,if语句应该返回1。这是预料之中的。但是,在设置$node后发生了意外情况:设置后,它似乎为FALSE。什么?前几行,我的fetch()尝试返回了预期值,所以我不知道发生了什么。

$sth = $dbh->prepare("
    SELECT *, COUNT(*) AS num_rows
    FROM flow
    INNER JOIN flow_strings
        USING(node_id)
    WHERE
        (
            parent = 0
            OR parent = :user_flow
        )
        AND source = 0
        AND string = :input
    ");
$sth->bindParam(':user_flow', $user->info->flow);
$sth->bindParam(':input', $input_sentence);
$sth->execute();

// If node exists.
if ($sth->fetch()->num_rows > 0)
{
    // Get the information for the node.
    $node = $sth->fetch();

[...] etc

我猜测光标向前移动,然后没有什么可读的,所以返回FALSE。当然,有一种方法可以解决这个问题!当我运行$sth->fetch()->num_rows时,我不是想改变任何东西 - 我只是想读取一个值。有解决方法吗?我做的事情很奇怪吗?我迷路了,哈哈。

谢谢! :)


编辑:

Notice: Undefined variable: node_count ... on line 56

// Retrieve all child nodes under $parent.
$node_query = $dbh->prepare("
    SELECT *, COUNT(*) AS num_rows
    FROM flow
    WHERE parent = :parent
    ");
$node_query->bindParam(':parent', $parent);
$node_query->execute();

// If child nodes exist.
if ($node_count = $node_query->fetch() && $node_count->num_rows > 0) // Line 56
{

[...] etc

1 个答案:

答案 0 :(得分:2)

将数据数组分配给某个变量,并在不进一步提取的情况下使用它:

if (($row = $sth->fetch()) && $row->num_rows > 0) {
    // work with $row here
}