【问题标题】:Connecting to a DB using PDO returning a non object error使用 PDO 连接到数据库返回非对象错误
【发布时间】:2012-09-02 08:38:11
【问题描述】:

我尝试按照有关 PDO 的本教程进行操作,并且完全按照它进行操作,但是当尝试在非常基本的级别上进行连接时,它会输出一个非对象错误。我做了一个小测试来确定 $query 变量的布尔值,它的结果是错误的,这会产生错误。为什么要这样做?:

教程

http://www.youtube.com/watch?v=lb0NYODtGr4&feature=share&list=EC23A4AFEA46A5CB23

错误

致命错误:在非对象上调用成员函数 fetch() C:\xampp\htdocs\projects\dentaloffice\php\php_connect.php 在第 16 行

代码

<?php

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

$db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname =' . $config['db']['dbname'], $config['db']['username'], $config['db']['password']);

$query = $db->query("SELECT appointments.ROOM FROM appointments");

if($query === false){
    echo '$query variable returned false <br>';
}else{
    echo '$query variable returned true <br>';
}

while ($row = $query->fetch(PDO::FETCH_ASSOC)){
    echo $row['ROOM'];
}

?>

【问题讨论】:

  • 请将print_r($db-&gt;errorInfo()); 行添加到false 分支。它显示了什么?
  • 另外,如果你想打印变量,你需要使用双引号而不是单引号
  • 嗨,@raina77ow,这是它返回的内容:Array ( [0] =&gt; 3D000 [1] =&gt; 1046 [2] =&gt; No database selected )

标签: php object pdo fetch sqlconnection


【解决方案1】:

改变这一行:

$db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname =' . $config['db']['dbname'], $config['db']['username'], $config['db']['password']);

...进入这个...

$db = new PDO("mysql:host={$config['db']['host']};dbname={$config['db']['dbname']}",
              $config['db']['username'], $config['db']['password']);

换句话说,删除dbname 之后的空白符号,它就会起作用。 ) PDO DSN 语法非常严格,并且您示例中的字符串被解析为没有指定数据库 - 因此您会看到一个错误。

顺便说一句,始终按照我之前在 PDO 代码的false query/statement/result 分支中的评论中显示的方式检查errorInfo() 是一个好习惯。现在你可能明白为什么了。 )

【讨论】:

  • 哦,哇!那行得通。我永远不会猜到这是问题所在。我想我什至可能会放置那个空白以使其看起来更干净。非常感谢,@raina77ow!
【解决方案2】:

创建一个 phpinfo 文件并检查您是否启用了 PDO 并安装了正确的驱动程序。

【讨论】:

  • 解决了:P 这是一个非常迟钝的错误。我使用的是表名而不是实际的数据库名称。我的好坏。非常感谢!
  • 如果未启用 PDO,错误将完全不同(在另一个地方)。
【解决方案3】:

确保您已启用 PDO。

顺便说一句,您可以像这样检查查询验证:

if($query) // will return true if succefull else it will return false 
{ 
// code here for true
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2017-03-30
    相关资源
    最近更新 更多