2012-06-14 62 views
0

以下是我的應用程序的代碼片段。請記住,我對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 
+0

你嘗試過閱讀文檔? –

回答

2

數據數組分配給一些變量並使用它沒有進一步取:

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

儘管這個示例代碼實際上並不是獨立工作的(PHP抱怨說,由於語句的第二部分,儘管第一部分是第一部分,所以沒有設置$ row)在將數組設置爲變量之前,先執行其他任何操作。我不敢相信我沒有嘗試過。謝謝! – Nathanael

+0

@Nathanael Shermett:「雖然這個示例代碼實際上並不是獨立工作的,但它實際上並不正確。這個確切的例子是獨立工作的。 「在做其他事情之前將數組設置爲變量」---它不會改變任何東西 – zerkms

+0

你確定嗎?我對它進行了測試,直到我進行了我提到的修改之前,我得到了一個錯誤。 – Nathanael