Php 致命错误:未捕获异常';PDO异常';带着信息

Php 致命错误:未捕获异常';PDO异常';带着信息,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试运行MySQL PDO查询。我不知道为什么会出现致命错误。我查看了其他帖子,但他们的答案似乎无法解决我的问题 脚本正在连接到数据库。用户名和密码是正确的,我已经在下面的脚本中删除了它们 我的输出: Connected to database Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'nobody'@'localho

我正在尝试运行MySQL PDO查询。我不知道为什么会出现致命错误。我查看了其他帖子,但他们的答案似乎无法解决我的问题

脚本正在连接到数据库。用户名和密码是正确的,我已经在下面的脚本中删除了它们

我的输出:

Connected to database
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'nobody'@'localhost' (using password: NO)' in /home/a/public_html/d/inc/header.php:34 Stack trace: #0 /home/a/public_html/d/inc/header.php(34): PDO->__construct('mysql:host=;dbn...', NULL, NULL) #1 /home/a/public_html/d/inc/header.php(43): testdb_connect() #2 /home/a/public_html/d/article.php(3): include('/home/a/p...') #3 {main} thrown in /home/a/public_html/d/inc/header.php on line 34
我的代码:

<?php
    /*** MySQL  hostname ***/
    $hostname = 'localhost';
    /*** MySQL  username ***/
    $username = 'removed';
    /*** MySQL  password ***/
    $password = 'removed';
    try {
        function testdb_connect(){
            $dbh = new PDO("mysql:host=$hostname;dbname=removed", $username, $password);
            return ($dbh);
        }
            echo 'Connected to database';
        }
    catch(PDOException $e) {
        echo $e->getMessage();
    }

    $dbh = testdb_connect();

    $id = $_GET[id];
    echo 'dfsdfs ' . $id;
    var_dump($dbh);
    $sql = "SELECT * FROM 'radiologyArticles' WHERE 'id' = :id";
    $stmt = $dbh->prepare($sql);
    $stmt->bindParam(':id', $id);
    $stmt->execute();
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

?>

        <section>
            <header>
                <h2><?php echo $row['articleTitle']; ?></h2>
                <h3>A generic two column layout</h3>
            </header>
            <p>
                <?php echo $row['articleBody']; ?>
            </p>
        </section>

        <?php
    }
            // Close the PDO connection
            $link = null;
        ?>


但您没有成功连接。
echo“连接到数据库”
testdb\u connect()
。testdb\u connect()函数中$username和$password值的变量范围。。。。不要把try/catch放在函数定义的周围,而是放在函数调用的周围
$username
$password
不在函数
testdb\u connect()
的范围内。要么将它们作为参数传递给该函数,要么不必为函数操心,直接调用
new PDO(…)
。Mark Baker,我应该将$username和$password放在哪里以防止范围问题?thanks@bobafart-将它们作为参数传递给testdb_connect()函数,但未成功连接。
echo“连接到数据库”
testdb\u connect()
。testdb\u connect()函数中$username和$password值的变量范围。。。。不要把try/catch放在函数定义的周围,而是放在函数调用的周围
$username
$password
不在函数
testdb\u connect()
的范围内。要么将它们作为参数传递给该函数,要么不必为函数操心,直接调用
new PDO(…)
。Mark Baker,我应该将$username和$password放在哪里以防止范围问题?thanks@bobafart-将它们作为参数传递给testdb_connect()函数我刚刚做了这个标记。谢谢你的帮助。与旧的MYSQL查询相比,PDO方式非常冗长。必须有更好的方法为PDO查询构造代码。这就是您的专家编码器构造简单PDO查询的方式吗?使用Mark的上述代码可以消除致命错误问题。谢谢你,马克。但是,现在我的ECHO输出状态不返回任何内容。查询是有效的,因为mySQL表中包含数据,字段不是空的。知道为什么没有输出吗?大多数人会使用包装器类进行PDO,采用面向对象的方法。。。实例化该类,将连接细节作为参数传入,并提供getconnection()方法;然后该类可以被注入任何其他需要的函数/方法中。你能给我举一个包装类的例子吗?是时候了解更多了。。谢谢,有没有一种方法可以用PDO错误检查原始的mySQL查询?在旧方法中,我可以简单地回显$sql,然后将输出剪切并粘贴到mySQL中,以测试查询以确保其准确性。似乎不能用事先准备好的陈述来做到这一点,有没有办法做到这一点?谢谢,我刚刚做了这个标记。谢谢你的帮助。与旧的MYSQL查询相比,PDO方式非常冗长。必须有更好的方法为PDO查询构造代码。这就是您的专家编码器构造简单PDO查询的方式吗?使用Mark的上述代码可以消除致命错误问题。谢谢你,马克。但是,现在我的ECHO输出状态不返回任何内容。查询是有效的,因为mySQL表中包含数据,字段不是空的。知道为什么没有输出吗?大多数人会使用包装器类进行PDO,采用面向对象的方法。。。实例化该类,将连接细节作为参数传入,并提供getconnection()方法;然后该类可以被注入任何其他需要的函数/方法中。你能给我举一个包装类的例子吗?是时候了解更多了。。谢谢,有没有一种方法可以用PDO错误检查原始的mySQL查询?在旧方法中,我可以简单地回显$sql,然后将输出剪切并粘贴到mySQL中,以测试查询以确保其准确性。似乎不能用事先准备好的陈述来做到这一点,有没有办法做到这一点?谢谢
/*** MySQL hostname ***/
$hostname = 'localhost';
/*** MySQL username ***/
$username = 'removed';
/*** MySQL password ***/
$password = 'removed';

function testdb_connect ($hostname, $username, $password){
    $dbh = new PDO("mysql:host=$hostname;dbname=removed", $username, $password);
    return $dbh;
}

try {
    $dbh = testdb_connect ($hostname, $username, $password);
    echo 'Connected to database';
} catch(PDOException $e) {
    echo $e->getMessage();
}