php - 对(非对象)中的非对象调用成员函数prepare()

标签 php mysql class

我收到此错误:在第 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*/

测试.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 从未被调用,这就是您收到此错误的原因。

要解决此问题,您可以执行以下两件事:

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

我推荐第二种选择

关于php - 对(非对象)中的非对象调用成员函数prepare(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134891/

相关文章:

php - laravel 查询逗号分隔字符串中的位置

mysql - 从先前的记录中选择并使用两个主要 ORDER BY

java - 在私有(private)方法中从另一个类访问对象

class - 'o = o or {}'在Lua中做什么?

php - 在 PHP 中组织类

php - 使用 jQuery 更改对象上的类不允许我执行新类的 onClick 事件

php - 使一行可点击

php - 简单的 Select 语句不能使用 PDO

PHP/MySQL 事件(ala facebook)

php - 如何让 PHP 将我的其他页面正确打印到 iframe 中?