数据库连接。误解错误消息

时间:2015-08-09 14:34:22

标签: php database while-loop

我收到以下错误消息:

  1.   

    警告:PDO :: __ construct()要求参数4为数组,字符串在第2行的C:\ wamp \ www \ MyProjects \ GhislainPOO \ personnages.php中给出。没有密码需要,我想知道它是什么数组在这里意味着什么?

  2.   

    致命错误:在第3行的C:\ wamp \ www \ MyProjects \ GhislainPOO \ personnages.php中的非对象上调用成员函数query()是$ bdd而不是对象,尽管我使用“new” PDO“?

  3. PHP

    <?php
    $bdd= new PDO ('localhost', 'POO', 'root', '');
    $bdd->query( "SELECT * FROM jeux_combats");
    $result = $bdd->query( "SELECT * FROM jeux_combats");
    
    
    while ($donnee = $result->fetch()) {
    echo '<p>'.'le personnage'.$donnee['nom'].'a une force de'.$donnee['forceperso'].'</p>';
    }
    ?>
    

1 个答案:

答案 0 :(得分:0)

请阅读手册:http://php.net/manual/en/pdo.construct.php

  1. 参数:有关数据库连接的信息
  2. 参数:连接的用户名
  3. 参数:连接密码
  4. 参数:a key =&gt;值驱动程序特定连接选项的数组(可选)
  5. 应该是这样的:

    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    

    关于你的第二个问题。修复第一个问题后,错误应该消失。无论如何......如果您担心即使在解决第一个问题后第二个错误也会再次出现,您可以检查$bdd是否为null。类似的东西:

    if($bdd != null){
        if($result = $bdd->query( "SELECT * FROM jeux_combats")){
            while ($donnee = $result->fetch(PDO::FETCH_ASSOC)) {
            echo '<p>'.'le personnage'.$donnee['nom'].'a une force de'.$donnee['forceperso'].'</p>';
            }
        }
    }
    

    您的案例中的整个代码将是:

    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    
    try {
        $bdd = new PDO($dsn, $user, $password);
    
        if($bdd != null){
            if($result = $bdd->query( "SELECT * FROM jeux_combats")){
                while ($donnee = $result->fetch(PDO::FETCH_ASSOC)) {
                echo '<p>'.'le personnage'.$donnee['nom'].'a une force de'.$donnee['forceperso'].'</p>';
                }
            }
        }
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }