PHP数据插入无法使用PDO

时间:2016-09-03 07:41:32

标签: php pdo

我正在尝试使用PDO.Connection成功建立数据到数据库,但准备功能不起作用。它给了我一个错误:

  

致命错误:在null上调用成员函数query()   第8行的E:\ xammp \ htdocs \ OOP \ Project \ classes \ insert.php

我的 index.php 页面:

<?php

    function __autoload($cl){

        require_once "classes/$cl.php";

    }

    $connection = new database();

    if(isset($_POST['submit']))
    {
         $name = $_POST['name'];
         $email = $_POST['email'];
         $ph = $_POST['phone'];

        try
        {
            $ins = new insert();

        }
        catch(PDOEXCEPTION $e)
        {
            echo $this->con_error . $e->getmessage();
        }
    }

类/ database.php中:

<?php

class database{

    public $db;
    public $con_error;

    protected function connection(){

        try
        {
            $this->db = new PDO("mysql:host=localhost;dbname=oop","root","");
        }
        catch(PDOException $e)
        {
            echo $this->con_error="An error in connection" . $e->getmessage();
        }

    }
    public function __construct(){

        return $this->connection();

    }



}

类/ insert.php:

<?php

class insert extends database{
    public $stmt; 

    public function __construct(){

        $stmt = $this->db->prepare("INSERT INTO `users` (`name`,`email`,`phone`) VALUES (:name,:email,:phone)");
        $stmt->bindParam(":name",$name);
        $stmt->bindParam(":email",$email);
        $stmt->bindParam(":phone",$ph);
        $stmt->execute();

    }

}

1 个答案:

答案 0 :(得分:1)

insert不应该是database的孩子。如果您为每个操作执行此操作,您最终将拥有许多每个都有自己的数据库连接的类。您应该让它们将连接作为参数,因此它们都可以使用相同的连接。

此外,您的函数正在使用变量$name$email$ph,但它们并未作为参数传递给函数。你不应该在construtor中执行插入,这应该以正常方法完成。构造函数仅用于初始化类对象。

class insert {
    private $db;

    public function __construct($db) {
        $this->db = $db;
    }

    public function insertUser($name, $email, $ph) {
        $stmt = $this->db->db->prepare("INSERT INTO `users` (`name`,`email`,`phone`) VALUES (:name,:email,:phone)");
        $stmt->bindParam(":name",$name);
        $stmt->bindParam(":email",$email);
        $stmt->bindParam(":phone",$ph);
        $stmt->execute();

    }

}          

然后你的主要代码就像:

$database = new database;

if(isset($_POST['submit']))
{
     $name = $_POST['name'];
     $email = $_POST['email'];
     $ph = $_POST['phone'];

    try
    {
        $ins = new insert($database);
        $ins->insertUser($name, $email, $ph);

    }
    catch(PDOEXCEPTION $e)
    {
        echo $this->con_error . $e->getmessage();
    }
}