同时并通过获取PDO :: FETCH_OBJECT来预测不同的行为

时间:2016-10-14 21:49:23

标签: php mysql pdo foreach

使用类似的东西:

var options = {
   rememberLastLogin: false,
   auth: {
      sso: false,
      redirect: false
   }
};

var lock = new Auth0Lock('clientID', 'account.auth0.com', options);

然后尝试用f.e。

获取记录
lock.show

它返回一个带有StdObjects的数组,如下所示:

var concatFilters = function (obj){
    var data = [];

    var array = $.map(obj, function (value, index){
        return [value];
    });

    function iterate(lists){
        var values = [];

        function process(index){
            var list = lists[index];

            if(list){
                for(var i = 0; i < list.length; i++){

                    if(list[i]){
                        values[index] = list[i];
                    }
                    process(index + 1);
                }
            }

            var value = values.join('');

            if(data.indexOf(value) === -1){
                data.push(value);
            }

            return data;
        }

        for(var num = 0; num < lists.length; num++){
            process(num);
        }

        return data
    }

    iterate(array);

    var filters = data.filter(Boolean);

    return filters.join(', ');
};

var myObj = {
    classes1: ['.classI'],
    classes2: ['.classA', '.classB'],
    classes3: ['.class1', '.class2', '.class3'],
}

var concatVals = concatFilters(myObj);
console.log(concatValues);

使用$db = new PDO(connection_details) $query = "SELECT * FROM vservers LIMIT 5"; $result = $db->query($query); 返回StdObjects

while ($row = $result->fetchAll(PDO::FETCH_OBJ)) {
    var_dump($row);
}

有人可以解释一下这种行为吗?通常情况下,我想像array (size=5) 0 => object(stdClass)[3] public 'vserverid' => string '898' (length=3) public 'templatename' => string 'Debian' (length=14) public 'template' => string 'debian-7.0-x86' (length=14) 1 => object(stdClass)[4] public 'vserverid' => string '792' (length=3) public 'templatename' => string 'Ubuntu' (length=33) public 'template' => string 'ubuntu-15.04' (length=27) 一样返回对象,但这是一个好习惯吗?

1 个答案:

答案 0 :(得分:1)

fetchAll()将所有结果作为数组返回,其中每个元素都是表示表中一行的对象。

while代码中,第一次迭代将$row设置为整个结果集,并将其作为单个数组转储。只有一次迭代,因为下次调用fetchAll()会返回一个空数组,因为没有什么可以提取。

foreach代码中,fetchAll()将数组返回到foreach,然后一次迭代一个元素,将$key设置为每个对象。然后你将一个物体转移到你的身体里。

通常,当您使用while时,您使用的是fetch(),而不是fetchAll()。此代码等同于foreach

while ($key = $result->fetch(PDO::FETCH_OBJ)) {
    var_dump($key);
}