php - 未捕获的错误:调用成员函数 prepare() (PDO, php)
问题描述
我正在尝试使用 PHP 中的公共函数从表中获取数据,但出现此错误:
未捕获的错误:调用成员函数 prepare() (PDO, php)
我正在寻找 2、3 个小时......但没有类似的结果,或者我不明白。
<?php
class Config {
public static $SQL;
private function __construct() {
$host_name = "localhost";
$base_user = "root";
$base_pass = "";
$base_name = "home_page";
try {
self::$SQL = new PDO("mysql:host=$host_name;dbname=$base_name", $base_user, $base_pass);
self::$SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
die("Something went wrong, database connection closed. Reason: ". $e->getMessage());
}
}
public static function GetData($table, $data, $id) {
$wc = Config::$SQL->prepare('SELECT `'.$data.'` FROM `'.$table.'` WHERE `ID` = ?');
$wc->execute(array($id));
$r_data = $wc->fetch();
return $r_data[$data];
}
}
?>
我在我的基本文件中使用它:
<h1><?php echo Config::GetData("page_details", "Moto", 1) ?></h1>
错误来自这一行:
$wc = self::$SQL->prepare('SELECT `'.$data.'` FROM `'.$table.'` WHERE `ID` = ?');
解决方案
有什么特别的原因要在任何STATIC
地方使用吗?常见的方法是使用公共的、动态的方法和属性。我在 PHPs OOP 中使用建议的命名约定重写了您的示例,它可以工作:
<?php
class Config
{
/** @var PDO $conn */
private $conn = null;
public function __construct()
{
$host_name = "localhost";
$base_user = "root";
$base_pass = "";
$base_name = "home_page";
try {
$this->conn = new PDO("mysql:host=$host_name;dbname=$base_name", $base_user, $base_pass);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully"; // <- this is unnnesesary
} catch (PDOException $e) {
die("Something went wrong, database connection closed. Reason: " . $e->getMessage());
}
}
public function findById($table, $data, $id)
{
$stmt = $this->conn->prepare('SELECT `' . $data . '` FROM `' . $table . '` WHERE `uid` = ?');
$stmt->execute(array($id));
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
// just for test
$cfg = new Config();
print_r($cfg->findById('foo', '*', 1));
或者在你的情况下
<?php echo $cfg->findById("page_details", "Moto", 1)['Moto'] ?>
推荐阅读
- java - 如何测量 Kamon 在 Prometheus 上的 WSClient 请求的处理时间?
- android-studio - 使用 Android Studio/Intellij 在 Find Usage 搜索中隐藏自动生成的 Hilt 类
- python - django / 将多个模型传递给我的 ListView
- debian - 将 debian 包上传到启动板 ppa 时添加了更改日志
- reactjs - 如何在变量中呈现 html 标签(或新行)?
- python - 删除 .ppm 文件的元组括号
- amazon-s3 - delta 0.8.0 与 minio S3 存储桶写入异常和有关架构实施的问题
- python - Using python pandas how can I select matched pairs to perform a matched-pair student's t-test?
- javascript - 循环中的 ES6 变量范围,内部等待
- javascript - js Date() 对象如何进行算术运算(+, - * / )?