0

这是我的代码:

class DB {
static $instance;

function get() {
    if (self::$instance === null) {
        self::$instance = new PDO('mysql:host=localhost;dbname=forum', 'root', 'root');
    }
    return self::$instance;
}

function getAllUsers() {
    $users = array();
    $sql = "SELECT * FROM users";
    foreach (self::get()->query($sql) as $row) {
        $users[] = new User($row);
    }
    return $users;    
}
}

现在我在这里调用 getAllUsers 函数:

class App {
function showUsers() {
    $users = DB::getAllUsers();
}

除了它给我一个错误:

警告:为 foreach() 提供的参数无效

当我在做var_dumpself::get得到一个bool(false)

有人可以告诉我我做错了什么吗?

4

1 回答 1

7

PDO::query仅在成功将查询发送到数据库并返回有效响应(即驱动程序没有返回 SQL 错误)时才返回PDOStatement对象。但是,如果它失败,它将返回。因此,您必须对此进行检查才能处理错误。此外,您可以选择将PDO 置于异常模式,使其在遇到错误时抛出异常。这样,您可以在调用 PDO 对象时使用 try/catch 来处理错误。请参阅下面的示例...false

使用 PDO 的默认错误模式(静默):

if ($result = self::get()->query($sql)) {
    /* Iterate here */
    foreach ($result as $row) {
        /* Do whatever you want with $row */
    }
} else {
    /* Handle errors here */
    echo "There was an error with the query!";
    var_dump(self::get()->errorInfo());
}

在异常模式下使用 PDO:

/* Put PDO Into Exception Mode */
self::get()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    foreach (self::get()->query($sql) as $row) {
        /* Do whatever you want with $row */
    }
} catch(PDOException $e) {
    /* If PDO fails we handle it here */
    echo "Your query failed: " . $e->getMessage();
}
于 2012-12-15T20:55:57.537 回答