Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO::FETCH_OBJ是否可以将null字段的值设置为null,而不是保留未定义的属性?_Php_Mysql_Pdo - Fatal编程技术网

Php PDO::FETCH_OBJ是否可以将null字段的值设置为null,而不是保留未定义的属性?

Php PDO::FETCH_OBJ是否可以将null字段的值设置为null,而不是保留未定义的属性?,php,mysql,pdo,Php,Mysql,Pdo,如果您: 将表作为查询的一部分左键联接 并使用$W=$stmt->fetch(PDO::fetch_OBJ)循环结果 并且有一个字段,ColumnName,其值为空,因为无法为当前行进行联接 然后属性$W->ColumnName将被取消定义 是否存在PDO设置,其中null列可以在获取的对象中将其属性定义为null?而不是使用PHPs标准类来检索值,您可以使用如下所示的实体类 Class customer { protected $_email; public functio

如果您:

  • 将表作为查询的一部分左键联接

  • 并使用
    $W=$stmt->fetch(PDO::fetch_OBJ)
    循环结果

  • 并且有一个字段,
    ColumnName
    ,其值为空,因为无法为当前行进行联接

  • 然后属性
    $W->ColumnName
    将被取消定义


    是否存在PDO设置,其中null列可以在获取的对象中将其属性定义为null?

    而不是使用PHPs标准类来检索值,您可以使用如下所示的实体类

    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(); 
    

    这实际上就是我正在做的,但是如果字段为null,因此属性未定义,则会得到
    注意:未定义的属性:stdClass::SomeField
    FETCH\u ASSOC
    是否以不同的方式处理空值?@Nick是否为StdClass中的null属性设置默认值?能否为
    StdClass
    设置默认值?@Nick是。但您最终将创建一个类似于上述实体类的实体类。@Nick,这样您就可以创建实体类并分配一个默认值,或将其留空为null,从数据库中获取记录,将其分配给实体类,验证数据并使用它。