我搜索过每一个关于此的答案,似乎没有人完全回答正在发生的事情。 目前,在尝试使用pdo编写语句时,我在标题中出现错误。
我试过了:
使用构造函数
使用非静态
当我有一个构造函数时使用$ this
捕获PDO异常,似乎没有抛出
这是main.php
class db {
public static $db;
public static $db2;
public static function start() {
$host = "localhost";
$dbname = "dbname";
$usr = "user";
$ps = "pass";
$pdo = "mysql:host=$host;dbname=$dbname";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => true
];
try {
db::$db = new PDO($pdo, $usr, $ps, $opt);
return db::$db;
} catch(PDOException $e) {
$e->getMessage();
}
}
}
然后初始化数据库,我用db::start();
现在,错误。
在main.php中,在一个完全不同的类和函数中,我尝试静态调用此连接。
$stmt0 = db::$db->prepare("SELECT * FROM users WHERE uname=:u");
但是一旦完成,我就会收到标题中的错误。
大多数人可能会认为,嗯,连接必须有错误,如果它调用它为null。如果是这种情况,有些事情会阻止我的异常被抛出,因为我在错误日志或页面上看不到任何内容。
答案 0 :(得分:1)
你的PDO无法连接,因为你没有做任何有关这种情况的事情(你catch
但是然后默默地放弃它),它就会受到关注。
尝试删除try..catch
块。如果连接中发生错误,您需要知道!
答案 1 :(得分:0)
我在http://phpfiddle.org/上尝试了这段代码并且它有效: (打开URL,切换到“CodeSpace”并粘贴下面的代码)
<?php
class db {
public static $db;
public static function start() {
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => true
];
try {
require "util/public_db_info.php";
$db = new PDO($dsn, $user_name, $pass_word);
return $db;
} catch(PDOException $e) {
die($e->getMessage());
}
}
}
$db = db::start();
$result = $db->prepare("SELECT * FROM books WHERE id <= 10");
$status = $result->execute();
if (($status) && ($result->rowCount() > 0))
{
$results = array();
//convert query result into an associative array
while ($row = $result->fetch(PDO::FETCH_ASSOC))
{
$results[] = $row;
}
var_dump($results);
}
?>