【问题标题】:ERROR in PDO : Call to a member function prepare() on nullPDO 中的错误:在 null 上调用成员函数 prepare()
【发布时间】:2016-09-11 14:36:05
【问题描述】:

我在使用准备函数时遇到问题 ==> 在 null 上调用成员函数 prepare() 我有两个页面 classo.php 和 index.php

classo.php:

    <?php 

        class classo
        {

            function connection(){

                $db=new pdo ('mysql:host=localhost;dbname=pronostic','root','');
                $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

            }



            function insererDonne($pseudo,$password)
            {      
                        global $db;
                        classo::connection();     
                $donne=array(
                    'user' =>$pseudo,
                    'pass' =>$password 
                    );

                $req="INSERT INTO users (user,pass) VALUES (:user,:pass)";

                $sql=$db->prepare($req);

                $sql->execute($donne);

            }



        }


 ?>

index.php:

<?php 


require('classo.php');


$data=new classo();
$data->insererDonne('dsds','tosdsta');


 ?>

您知道我该如何解决这个问题吗?这是我第一次收到来自 PHP 的这个错误,而且我在 PHP 中使用对象和类进行了新的编码。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: php mysql oop pdo prepare


    【解决方案1】:

    您的代码中有两个大问题:

    1. 可变的可见性
    2. 静态调用

    详细说明:

    1. 在 oop 中,您应该忘记全局变量。它们违反了封装原则。此外,您的代码中甚至没有任何全局变量,因此global $db; 行毫无意义。在类级别(property)声明一个私有 $db 变量,在 connection() 方法中对其进行初始化,并在 insert 方法中对其进行访问。

    2. 您将连接方法称为classo::connection();。但是,您需要将连接方法声明为static。要么将您的连接方法声明为静态(但随后将 $db 也更改为静态),或者使用 $this 将其作为常规方法调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2020-03-11
      • 2018-01-12
      相关资源
      最近更新 更多