2013-04-16 57 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的新手,所以为什么不试着把他带到正确的道路上呢? :) –

相关问题