【问题标题】:Call to a member function prepare() on a non-object in (non object) [duplicate]在(非对象)中的非对象上调用成员函数prepare()[重复]
【发布时间】:2017-11-06 10:35:54
【问题描述】:

我收到此错误:在第 25 行调用非对象上的成员函数 prepare()。 我已经标记了它所指的第 25 行;有人可以检查并告诉您出了什么问题吗?我尝试了所有可能的方法,但无法弄清楚。

类数据库

class db {

public $connect;
private $username = "root";
private $password = "";
private $dns="mysql:host=localhost;dbname=etrharam_db";
private $method=array(PDO::MYSQL_ATTR_INIT_COMMAND=>"set name utf8");

public function connection(){
    $connect= new PDO($this->dns,$this->username,$this->password,$this->method);
    return $connect;
}/*connection*/

public function Idu($query,$data){
    $pre=$this->connect->prepare($query);
    foreach($data as $index=>$val){
        $pre->bindValue($index+1,$val);
    }
    $pre->execute();
}/*idu*/    

public function Select($query,$data){
    $pre=$this->connect->prepare($query);
    foreach($data as $index=>$val){
        $pre->bindValue($index+1,$val);
    }
    $pre->execute();
    $res=$pre->fetchAll(PDO::FETCH_ASSOC);
    return $res;
}/*select*/

}/*db*/

test.php

include ('oop.php');
$oop= new db;
$query="SELECT * FROM `newcoll_tbl` WHERE id=?";
$data=array('1');
$res=$oop->Select($query,$data);
print_r($res);

有什么问题? 提前谢谢你。

【问题讨论】:

  • 转储 $connect 变量,看看里面有什么
  • 我想你忘了调用函数 connection() 来定义你的 $connect 变量。
  • 另外,在您的连接正常工作以及此代码中的其他问题后,请花时间阅读有关 the usefulness of PDO wrappers 的信息

标签: php mysql class


【解决方案1】:

您的变量$connect 为空,因为它从未被填充。您的函数 connection 从未被调用,这就是您收到此错误的原因。

要解决此问题,您可以做两件事:

  • 致电$oop->connection();
  • 将函数名称connection 更改为__construct,以便在调用$oop= new db(); 时自动运行

我会推荐第二种选择

【讨论】:

  • 我已经完成了所有这些,但是 PDOException (__construct) 给出了错误!!谢谢你解决了我的问题
猜你喜欢
  • 2011-07-17
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
相关资源
最近更新 更多