Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用返回非对象错误的PDO连接到数据库_Php_Object_Pdo_Fetch_Sqlconnection - Fatal编程技术网

Php 使用返回非对象错误的PDO连接到数据库

Php 使用返回非对象错误的PDO连接到数据库,php,object,pdo,fetch,sqlconnection,Php,Object,Pdo,Fetch,Sqlconnection,我试着在PDOs上遵循这个教程,完全遵循它,但是当尝试在一个非常基本的级别上连接时,它输出了一个非对象错误。我做了一个小测试来确定$query变量的布尔值,结果显示为false,这导致了错误。它为什么要这样做 教程 错误 致命错误:对中的非对象调用成员函数fetch() 第16行的C:\xampp\htdocs\projects\dentaloffice\php\php\u connect.php 代码 <?php $config['db'] = array( 'host'

我试着在PDOs上遵循这个教程,完全遵循它,但是当尝试在一个非常基本的级别上连接时,它输出了一个非对象错误。我做了一个小测试来确定$query变量的布尔值,结果显示为false,这导致了错误。它为什么要这样做

教程

错误

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

代码

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

?>


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

确保已启用PDO

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

if($query) // will return true if succefull else it will return false 
{ 
// code here for true
} 
更改此行:

$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()
是一个很好的做法。现在你可能明白了原因。)

请添加
print\r($db->errorInfo())行到
false
分支。它显示了什么?如果你想打印变量,你需要使用双引号而不是单引号,@raina77ow,这是它返回的:
Array([0]=>3D000[1]=>1046[2]=>未选择数据库)
解决了它:P这是一个真正的延迟错误。我使用的是一个表名,而不是实际的数据库名。我的大坏蛋。非常感谢!如果PDO没有启用,错误将完全不同(在另一个地方)。哦,哇!成功了。我从来没有想到这就是问题所在。我想,我甚至可能是为了让它看起来更干净而加上了空格。非常感谢,@raina77ow!