文件db.php:
<?php
class Database
{
private $host;
private $port;
private $dbname;
private $user;
private $password;
protected $conn;
public function __construct($host, $port, $dbname, $user, $password) {
$this->host = $host;
$this->port = $port;
$this->dbname = $dbname;
$this->user = $user;
$this->password = $password;
}
function error($error, $id)
{
echo $error.", ". $id;
die;
}
public function connect()
{
$result = $this->conn = new PDO("pgsql:host=$this->host port=$this->port dbname=$this->dbname user=$this->user password=$this->password");
}
}
和result.php:
<?php
require "db.php";
class Result extends Database
{
private $save;
public function __construct() {
parent::__construct("127.0.0.1", 5432, "blue", "postgres", "postgres");
}
public function validate()
{
$this->connect();
$sql = 'INSERT INTO test (name, surname, age, active) VALUES (:name, :surname, :age, :active)';
$stmt = $this->conn->prepare($sql);
$stmt->bindValue(':name', "Magdalena");
$stmt->bindValue(':surname', "Blizna");
$stmt->bindValue(':age', 29);
$stmt->bindValue(':active', false);
$stmt->execute();
return $stmt;
}
}
$save = new Result();
$save->validate();
我尝试将元素插入数据库,但是php返回错误:
致命错误:未捕获错误:调用成员函数prepare() 空
连接到数据库文件是可以的。为了连接数据库,我使用了$conn
中的变量db.php
。
我编辑验证功能。
答案 0 :(得分:0)
函数pg_connect()
不会像new PDO(...)
那样返回对象。它只是返回一个资源(某种形式的ID)。因此,您无法在其上调用函数prepare()
。相反,您必须像这样使用pg_prepare()
:
$connection = pg_connect("my parameters");
$statement = pg_prepare($connection, "some sql $1 $2");
$result = pg_execute($connection, $statement, ["param1", "param2"]);
答案 1 :(得分:0)
您要达到什么目标?您要解决哪个问题?
我看到了数据库类,它对PDO来说似乎是某种“门面”。
如果您只想使用准备好的语句,请尝试首先直接使用PDO。 OOP很好,但是起初很难。您需要明确定义的目的才能编写自己的类:)