suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Nach klassenübergreifendem Aufruf kann die Methode nicht gefunden werden

Übung der statischen Methodenüberladung, um einen verketteten Zugriff auf die Datenbank zu erreichen

demo5.php verweist auf die Klasse von Query.php

Beim Zugriff auf die Methode in Query erhalte ich auf der Seite die Meldung, dass die Methode „Tabelle“ nicht in der Datenbank gefunden wurde

Das Folgende ist der Quellcode, ich hoffe, Sie können mir helfen, die Fehler zu überprüfen

Der erste ist Query.php

<?php
//常用的数据查询操作
class Query
{
    //连接对象
    public $pdo = null;

    //数据表名称
    public $table = '';

    //字段列表
    public $field = '';

    //查询条件
    public $where = '';

    //显示数量
    public $limit = 0;


    //构造方法
    public function __construct(PDO $pdo)
    {
        $this->pdo = $pdo;
    }

    //调用表名
    public function table($tableName)
    {
        $this->table = $tableName;
        //关键是这一步
        return $this;
    }

    //调用字段
    public function field($fields)
    {
        $this->field = $fields;
        //关键是这一步
        return $this;
    }

    //设置查询条件
    public function where($where)
    {
        $this->where = $where;
        return $this;
    }
    //设置显示数量
    public function limit($limit)
    {
        $this->limit = $limit;
        return $this;
    }

    //创建SQL语句查询
    public function select()
    {
        //设置查询条件
        $fields = empty($this->field) ? '*' : $this->field;
        $where = empty($this->where) ? '' : ' WHERE ' . $this->where;
        $limit = empty($this->limit) ? '' : ' LIMIT ' . $this->limit;

        //SQL
        $sql = 'SELECT '.$fields. 'FROM' .$this->table. $where . $limit;

        //预处理执行
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

Der zweite ist demo5.php

<?php
//方法重载实例演示
require 'Query.php';
class Database
{
    //数据库连接对象
    protected static $pdo = null;

    //数据库连接方法,每次查询时再连接,实现真正的惰性连接,节省系统开销
    public static function connection()
    {
        self::$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');
    }

    //静态方法的重载,实现跨类调用
    public static function __callStatic($name,$arguments)
    {
        //连接上数据库
        self::connection();

        //实例化查询类
        $query = new Query(self::$pdo);

        //访问Query中的方法
        return call_user_func_array([$query, $name],[$arguments[0]]);
    }


}

$cats = Database::table('category')
    ->field('cate_id, name, alias')
    ->where('cate_id>=2')
    ->select();

foreach($cats as $cat){
    print_r($cat);
}

方人胥方人胥1289 Tage vor900

Antworte allen(2)Ich werde antworten

  • 方人胥

    方人胥2021-06-12 21:09:02

    找到问题了,是Query.php的第65行,做拼接的时候,FROM前后应该加上空格。

    Antwort
    0
  • 方人胥

    方人胥2021-06-12 17:18:12

    页面提示方法 'table' 在 Database 中未找到

    image.png

    Antwort
    0
  • StornierenAntwort