PHP链接:如何从mysql表中获取数据?

PHP链接:如何从mysql表中获取数据?,php,mysql,method-chaining,php-5.4,Php,Mysql,Method Chaining,Php 5.4,我试图在我的web开发项目中实现PHP链接方法。但我似乎不能把它做好 class foo extends base{ public $query = null; public $item = array(); public function __construct($connection){ parent::__construct($connection); } public function select($query){

我试图在我的web开发项目中实现PHP链接方法。但我似乎不能把它做好

class foo extends base{


    public $query = null;
    public $item = array();

    public function __construct($connection){
        parent::__construct($connection);

    }

    public function select($query){
         $this->query = $query;
         return $this;
    }

    public function where($query){
         $this->query = $query;
         return $this;
    }

    public function __toString()
    {
        $this->item = $this->connection->fetch_assoc($this->query);

        return var_export($this->item, true);
    }


}

$connection = new db($dsn = 'mysql:host=localhost;dbname=xxx',$username = 'xxx',$password = 'xxx');
$foo = new foo($connection);

$select = $foo->select("SELECT * FROM page")->where("page_id = 10 ");
print_r($select->item);
我得到的结果

Array
(
)
但我应该得到一行数据。就像我通常这样做

class boo extends base{

    ...

    public function select() {

        $sql = "
            SELECT * 
            FROM page
            WHERE page_id = ?
        ";

        $item = $connection->fetch_assoc($sql,array(1));
        return $item;

    }
}
我的链接方法遗漏了什么

编辑:

class base
{
    protected $connection = null;

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

    }


}
如果我只是打印
$select

print_r($select);
结果,

foo Object
(
    [query] => where page_id = 10 
    [item] => Array
        (
        )

    [connection:protected] => db Object
        (
            [connection] => PDO Object
                (
                )

            [dsn] => mysql:host=localhost;dbname=xxx
            [username] => xxx
            [password] => xxx
        )

)
试着

$select = $foo->select('*')->from('page')->where('page_id','10');
print_r($select);

通过以下调用,您所做的只是设置和替换
foo
类的
$query
成员变量的值:

$select = $foo->select("SELECT * FROM page")->where("page_id = 10 ");
因此,
$foo->select(“select*FROM page”)
设置
$query
成员变量的值,然后
->(“page\u id=10”)
替换该值


此外,您没有执行查询

您的
基础是如何实现的?你能把这个也写进你的问题里吗?尝试只打印select like
print\r($select)
而不是
print\r($select->item)
base
只是为了保留数据库连接的属性。请看一下我上面的编辑。thanks@lauthiamkok,现在使用最新更新,您看到问题所在了吗?使用这种方法,您需要将where子句附加到
where
方法中现有的
$query
,或者为查询的所有部分维护不同的变量,例如select、where、group by、,限制等,然后在执行前将它们合并到一个查询中。为什么不发送完整查询而不是将它们分开?当您返回
$this
时,链接工作正常。就添加where子句而言,最简单的情况是在
where
方法中执行
$this->query.=$query
。但是您还应该处理各种情况,例如,“如果在
选择之前调用
where
,该怎么办?”