【问题标题】:database connection. Misunderstanding of error messages数据库连接。对错误信息的误解
【发布时间】:2015-08-09 14:34:22
【问题描述】:

我收到以下错误消息:

  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”?

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

【问题讨论】:

  • 你的数据库是什么类型的? mysql?
  • 不需要这条线,顺便说一句$bdd-&gt;query( "SELECT * FROM jeux_combats");,一旦你正确连接就会产生错误。
  • 是的,我正在使用 mysql
  • 你也使用了两次$bdd-&gt;query()

标签: php database while-loop


【解决方案1】:

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

  1. 参数:关于数据库连接的信息
  2. 参数:连接的用户名
  3. 参数:连接密码
  4. 参数:一个键=>驱动程序特定连接选项的值数组(可选)

应该是这样的:

$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();
}

【讨论】:

  • 他收到$bdd is not an object 的错误,因为他没有正确连接到 PDO。一旦他解决了这个问题,错误就会消失。无需检查 pdo 变量是否不为 NULL,只要在 try-catch 块之后即可。
  • 我的回答不是和你说的一样吗?
  • @ghislain2458 我看不到你在哪里执行查询。
  • 试试我在答案底部提供的代码,让我知道它是否有效。它应该可以工作。
  • 如果有错误最好加上$bdd-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);php.net/manual/en/pdo.error-handling.php。而127.0.0.1 他们可能需要使用localhost
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 2013-09-04
  • 2012-01-21
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
相关资源
最近更新 更多