【发布时间】:2014-04-25 03:42:00
【问题描述】:
如果您:
Left Join 表作为查询的一部分
并使用
$W = $stmt->fetch(PDO::FETCH_OBJ)循环遍历结果还有一个字段
ColumnName,其值为空,因为无法为当前行进行连接。
那么属性$W->ColumnName将是未定义的。
是否存在 PDO 设置,其中为 null 的列可以在获取的对象中将其属性定义为 null?
【问题讨论】:
如果您:
Left Join 表作为查询的一部分
并使用$W = $stmt->fetch(PDO::FETCH_OBJ) 循环遍历结果
还有一个字段ColumnName,其值为空,因为无法为当前行进行连接。
那么属性$W->ColumnName将是未定义的。
是否存在 PDO 设置,其中为 null 的列可以在获取的对象中将其属性定义为 null?
【问题讨论】:
而不是使用 PHP 标准类来检索值,您可以使用如下所示的实体类。
Class customer {
protected $_email;
public function __construct(array $config = array()){
$this->setOptions($config);
}
public function getEmail(){
return $this->_email;
}
public function setEmail($email){
$this->_email = $email;
}
public function setOptions(array $options)
{
$_classMethods = get_class_methods($this);
foreach ($options as $key => $value) {
$method = 'set' . ucfirst($key);
if (in_array($method, $_classMethods)) {
$this->$method($value);
} else {
throw new Exception('Invalid method name');
}
}
return $this;
}
public function setOption($key, $value){
return $this->setOptions(array($key, $value));
}
}
现在你可以简单地做到这一点。
$W = $stmt->fetch(PDO::FETCH_ASSOC);
$customer = new Customer($w);
现在访问属性将返回 null 或实体类中设置的默认值。即使它在查询结果中未定义。
$customer->getEmail();
【讨论】:
Notice: Undefined property: stdClass::SomeField。 FETCH_ASSOC 处理空值的方式不同吗?
StdClass设置默认值吗?