这是我的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我在这里调用getAllUsers函数:
class App {
function showUsers() {
$users = DB::getAllUsers();
}
Run Code Online (Sandbox Code Playgroud)
除了给我一个错误:
警告:为foreach()提供的参数无效
当我正在var_dump
上self::get
即时得到一个bool(false)
有人能告诉我我做错了什么吗?
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());
}
Run Code Online (Sandbox Code Playgroud)
在异常模式下使用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();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7530 次 |
最近记录: |