2

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

教程

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

错误

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

代码

<?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'];
}

?>
4

3 回答 3

4

更改此行:

$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 语法非常严格,并且您示例中的字符串被解析为没有指定数据库 - 因此您会看到一个错误。

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

于 2012-09-09T00:44:50.017 回答
1

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

于 2012-09-09T00:05:17.740 回答
1

确保您启用了 PDO。

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

if($query) // will return true if succefull else it will return false 
{ 
// code here for true
} 
于 2012-09-09T00:09:52.947 回答