【发布时间】:2015-11-08 15:20:08
【问题描述】:
嗨,世界编程天才。我是PDO和OOP的新手,请理解。
我尝试做世界上最简单的事情——从 MySQL 的表中获取数据。
我想:
1) SELECT * from ...大约有 20 个字段。
2) 获取具有 4-6 个属性的对象数组。
3)我想用fetchAll和FETCH_CLASS...
PDOStatement PDO::query ( string $statement , int $PDO::FETCH_CLASS , string $classname , array $ctorargs )
我发现我们可以传递一个参数数组但不能实现它。
那我在做什么呢?
class handler{
connection etc..
public $params = array('surname','id','country','display' );
return $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'person',$this->params);
class person {
public $surname=null;
public $id=null;
public $country=null;
public $status=null;
然后
__construct ()
我不会说 - 因为我有 50 个变种((( }
所以,我需要从 20 个字段中过滤选项以获取一个类,但不是在 SELECT 模式下而不是 *...
可能吗?
我知道你是天才!
新手见谅
更新
function __construct($surname,$id,$country,$display) {
$this->surname=$surname;
$this->country=$country;
$id->id->$id
// 这个对象中我唯一需要的 }
function __construct() {
$arg=array('surname','id');
foreach ($arg as $val) {
$this->{$val}=$$val;
}
}
似乎它可能是下一个......不是构造函数来过滤属性......
更新 我尝试了@GolezTrol 提出的解决方案。 解决方案 1 主张... 注意:未定义的属性:Person::$_attributes in 如果我做 类实体{ 公共 $_attributes;
function __construct() { ....
或
class Person extends Entity {
public $_attributes;
}
它有效..但我得到一个对象...
[0] => Person Object
(
[_attributes] => Array
(
[0] => surname
[1] => id
[2] => country
[3] => status
)
[id] => 298
.. 不好(
【问题讨论】:
-
你说 " 然后 __construct () 我不会放它 - 因为我有 50 个变种((( }")。你能至少发布一个或两个?也许它会让你更清楚你打算实现什么。
-
我认为
FETCH_CLASS已经将所有列映射到属性。如果您指定的类需要其构造函数的参数,您只需要指定最后一个参数。但是您不需要将“姓氏”等的值放入属性$surname。 -
感谢您的评论!我会指定。我选择 *。它有 20 个参数。我把所有东西都带进一个班级。一个对象实际上有 20 个字段,如表中所示。我希望我的对象有 4 个!从 20 提交的文件留下一个选择 * 选项)))有可能吗?像 $args=array of 4. 如果数组中有 20 个 .. $this -> {property} ->$property
-
还是不清楚。您能否提供一个简化的示例(在您的原始问题中,而不是评论中)?
-
嗯,对我来说仍然没有意义,并且有一定的代码气味 - 可能是 XY 问题?无论如何,这不是
$classname的工作方式。它首先创建类的实例,然后(在构造函数完成后)设置属性。你想达到什么目的? (不是如何。)
标签: php mysql arrays object pdo