2013-04-16 53 views
0

嘗試爲我的項目獲取列,從來沒有在PDO中這樣做過,嘗試查看文檔但它並沒有真正的幫助。在非對象PDO上調用成員函數fetchColumn()

$sql = $CONNECT_TO_DATABASE->query("SELECT COUNT(*) FROM comments"); 
    $result = $sql->fetch(PDO::FETCH_ASSOC); 
    $r = $result->fetchColumn(); 

我做了什麼錯了?

致命錯誤:調用一個成員函數fetchColumn()在C語言的非對象:\ XAMPP \第6行

htdocs中\項目\ events.php
$r = $result->fetchColumn(); 

謝謝!

連接:

<?php 
/** 
* Connect to Database 
* @Author Jony <[email protected]> 
**/ 
    ##################CHANGE THIS#################### 
     /**           # 
     * MYSQL HOST HERE (Example: localhost)  # 
     **/           # 
                # 
     DEFINE ("MYSQL_HOST", "localhost");   # 
                # 
     /**           # 
     * MYSQL USER HERE (Example: root)   # 
     **/           # 
                # 
     DEFINE ("MYSQL_USER", "root");    # 
                # 
     /**           #  
     * MYSQL PASSWORD HERE (Example: password) # 
     **/           #   
                # 
     DEFINE ("MYSQL_PASSWORD", "");    # 
                # 
    ################################################# 

    # Connect to the database using PDO. 
    $CONNECT_TO_DATABASE = new PDO('mysql:host='.MYSQL_HOST.';dbname=project', MYSQL_USER, MYSQL_PASSWORD); 

    # See if theres an error while connecting to the database 
    try { 
     $CONNECT_TO_DATABASE->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $ERROR_MESSAGE) 
    { 
     echo 'ERROR: ' . $ERROR_MESSAGE->getMessage(); 
    } 


?> 
+0

請問您可以發佈連接代碼嗎? (沒有密碼) –

+0

完成,加了連接 –

+0

看看我的回答和你的常識 –

回答

6

$result你變量是一個單純的陣列,並且不具有任何方法。

您不需要第二次獲取呼叫。使用fetch或fetchColumn。你需要後者,你的情況:

$sql = $CONNECT_TO_DATABASE->query("SELECT COUNT(*) FROM comments"); 
$count = $sql->fetchColumn(); 

順便說一句,你不覺得這$CONNECT_TO_DATABASE有點長?那麼做什麼呢$pdo呢?

當你發佈你的連接代碼,在這裏是如何必須:

# Set PDO connection options 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
# Connect to the database using PDO. 
$dsn = 'mysql:host='.MYSQL_HOST.';dbname=project'; 
$pdo = new PDO($dsn, MYSQL_USER, MYSQL_PASSWORD); 

這就是全部。 PHP已經可以處理echo 'ERROR:業務。不需要干預

+0

謝謝。 也許它太長了。 –

+2

@JonyKale ......這對我的口味來說太過分了;-) –

0

試試這個假設你的PDO構造是準確的。

$sql = $CONNECT_TO_DATABASE->prepare("SELECT COUNT(*) FROM comments"); // Prepare your query with PDO 
$sql->execute(); // Once it is prepared execute it 

    if ($sql) { // Check if $sql is executed will return TRUE or FALSE 
     if ($sql->rowCount() > 0) { // If you get any rows back then 
      $r = $sql->fetchColumn(); // Get your results 
     } 
    } 
+0

-1是爲了什麼? –

+0

不是我的DV,但值得注意的是,如果您沒有參數並且查詢只運行一次,您並不需要準備好的語句。另外,使用'PDO :: ERRMODE_EXCEPTION',你可以簡化錯誤檢查:try/catch,你就完成了。 –

+1

嗯,是的,我明白這一點,但在他的代碼中,他沒有,我看到他的連接選項之前輸入了這個,所以我只是打了一個快速的方法來檢查它是否是去的或不去。而且,你有一點準備,但它的「永遠」很好習慣於準備你的查詢。特別是因爲這個人說他在OP中是PDO的新手,所以爲什麼不試着把他帶到正確的道路上呢? :) –

相關問題