Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/129.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映射组_CONCAT->;fetchAll和mode PDO::FETCH_类从字符串到数组_Php_Pdo_Magic Function - Fatal编程技术网

Php 如何使用pdo映射组_CONCAT->;fetchAll和mode PDO::FETCH_类从字符串到数组

Php 如何使用pdo映射组_CONCAT->;fetchAll和mode PDO::FETCH_类从字符串到数组,php,pdo,magic-function,Php,Pdo,Magic Function,我想知道fetchAll of PDO实际上是如何实现的,以了解如何将数据库(包括GROUP_CONCAT()逗号分隔的列表字符串)的结果映射到数组属性 拥有类似sql的 $query=“选择a.id,GROUP_CONCAT(b.name)作为(a.id=b.id_a)上连接b的引用名称” 将返回类似于 id(int) 参考信号(srting) 1. 马克,莫娜,萨姆 2. 吉姆,汤姆,莎拉,迈克 3. ... 由于您正在加载的列的名称是类的一部分,因此它将设置该值,而无需调用\u set方法

我想知道fetchAll of PDO实际上是如何实现的,以了解如何将数据库(包括GROUP_CONCAT()逗号分隔的列表字符串)的结果映射到数组属性

拥有类似sql的

$query=“选择a.id,GROUP_CONCAT(b.name)作为(a.id=b.id_a)上连接b的引用名称”

将返回类似于

id(int) 参考信号(srting) 1. 马克,莫娜,萨姆 2. 吉姆,汤姆,莎拉,迈克 3. ...
由于您正在加载的列的名称是类的一部分,因此它将设置该值,而无需调用
\u set
方法。因此,一种方法(似乎有效)是添加一个列别名,该别名在本例中的类名称列表中不存在

$query = "Select a.id, GROUP_CONCAT(b.name) AS nameList 
             FROM a 
             JOIN b on (a.id = b.id_a)"
然后,这将调用
\u set
方法,您可以在获得名称列表时进行处理

class someObject {
  public int $id;
  public array $referencingNames;

  public function __set($name, $value)
  {
    if($name == "nameList") {
        $this->referencingNames = explode(",", $value);
    } else {
        $this->$name = $value;
    }
  }
}

那么php文档在这里是错误的?由于似乎没有为私有属性?@helle调用set,FETCH_类的使用似乎绕过了访问修饰符。当大多数类都使用私有数据并且希望FETCH_类仍然能够正确填充它们时,这是有意义的。谢谢您的提示。我稍后会尝试并接受答案。很高兴有一个解决方案很好!!这真的很好,现在节省了我很多时间!