在PDO中调用非对象错误的成员函数query()

时间:2017-06-06 11:13:44

标签: php mysql pdo

这是我的sql连接代码

$config['db'] = array('host' => 'localhost', 'username' =>  'root', 'password' => '', 'dbname' => 'reputize');

try
{
    $db = new PDO('mysql:host='.$config['db']['host'].';dbname'.$config['db']['dbname'], $config['db']['username'], $config['db']['password']);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    echo "Database connected successfully";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}

这是我用来从表中获取数据的代码

$query = $db->query("select * from metaTags where filename='index'");
while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
{   
    $ptitle=$row['MetaTitle'];
    $desc=$row['MetaDisc'];
    $kwords=$row['MetaKwd'];    
}

但错误仍在显示

  

在第14行的C:\ xampp \ htdocs \ template OOP \ include \ class \ websiteClasses.php中的非对象上调用成员函数query()

我在这里和其他网站上尝试了很多解决方案,但没有用。 请帮我解决这个问题

2 个答案:

答案 0 :(得分:2)

您在此处遇到错误dbname'.$config['db']['dbname']应该是dbname='.$config['db']['dbname']

答案 1 :(得分:1)

您忘了在dbname之后添加'='。

您的配置应如下所示

dbname='.$config['db']['dbname']

从您的评论中,我了解您的'$ db'变量必须声明为其他函数可访问。请在查询数据库之前检查$ db是否有有效的数据库连接。

我通常使用下面的代码来连接和获取我的游戏项目的数据。

function getDbConnection()
{
  $pdo = null;
  try
  {
    $pdo = new PDO("mysql:host=" . HOST . ";dbname=" . DBNAME,USERNAME,PWD);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  }
  catch(PDOException $pe)
  {
    die("Sorry! Could not connect to database " . DBNAME. ": " . $pe->getMessage());
  }
  return $pdo;
}

function getData($qry)
{
  $res = null;
  try
  {
    if(!empty($qry))
    {
      $pdo = getDbConnection();
      if(!empty($pdo))
      {
        $res = $pdo->query($qry);
      }
    }
  }
  catch(PDOException $pe)
  {
    throw $pe;
  }
  return $res;
}

注意:上述功能不健全。但它确实有效。