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