Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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 表内Json表_Php_Json_Pdo - Fatal编程技术网

Php 表内Json表

Php 表内Json表,php,json,pdo,Php,Json,Pdo,我想用json在我的MySQL(PDO)中发送3个表。第一个表中有一个循环 注: 第一个表(fetchAll) 第二个表(获取) 第三个表(获取) $stmt1=$db->prepare(“从countid='1'的数据中选择*); $stmt1->execute(); $data=$stmt1->fetchAll(PDO::FETCH_OBJ); $stmt2=$db->prepare(“选择id,从id='2'所在的周中选择标题”); $stmt2->execute(); $data->w

我想用json在我的MySQL(PDO)中发送3个表。第一个表中有一个循环 注: 第一个表(fetchAll) 第二个表(获取) 第三个表(获取)

$stmt1=$db->prepare(“从countid='1'的数据中选择*);
$stmt1->execute();
$data=$stmt1->fetchAll(PDO::FETCH_OBJ);
$stmt2=$db->prepare(“选择id,从id='2'所在的周中选择标题”);
$stmt2->execute();
$data->weeks[]=$stmt2->fetch(PDO::fetch_OBJ);
$stmt3=$db->prepare(“从id='1'的用户处选择id、名称”);
$stmt3->execute();
$data->user[]=$stmt3->fetch(PDO::fetch_OBJ);
$response=新stdClass();
$response->data[]=$data;

echo json_编码($response)好的,现在需要多一点代码。您必须获取所有
数据
行,然后使用其中的键从其他两个表中获取相关行

$stmt = $db->prepare("SELECT * FROM data WHERE countid='1'");
$stmt->execute();
$datas = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach ( $datas as $key => &$data ) {
    // get related weeks data
    $stmt = $db->prepare("SELECT id,title FROM weeks WHERE data_id=:id ORDER BY id");
    $stmt->execute( array(':id'=>$data->id) );
    $data->weeks = $stmt->fetchAll(PDO::FETCH_OBJ);

    // get related user data  
    $stmt = $db->prepare("SELECT id,name FROM user WHERE id=:id ORDER BY id");
    $stmt->execute( array(':id'=>$data->user_id) );
    $data->user = $stmt->fetchAll(PDO::FETCH_OBJ);
}

echo json_encode( array('data'=>$datas) );
结果:

{
    "data": [
        {
            "id": 1,
            "title": "name of module1",
            "description": "description of module 1",
            "user_id": 1,
            "week": "1",
            "countid": 1,
            "weeks": [
                {
                    "id": 1,
                    "title": "Week 01"
                }
            ],
            "user": [
                {
                    "id": 1,
                    "name": "chris"
                }
            ]
        },
        {
            "id": 2,
            "title": "name of module 2",
            "description": "description of module 2",
            "user_id": 2,
            "week": "2",
            "countid": 1,
            "weeks": [
                {
                    "id": 2,
                    "title": "Week 02"
                }
            ],
            "user": [
                {
                    "id": 2,
                    "name": "john"
                }
            ]
        }
    ]
}

在第一个问题中,第一个表不是数组。为了使它成为一个数组,所有的代码都需要更改,所以我提出了一个新问题。提问者回答说,他可以在一个单独的问题中回答他。似乎不需要
fetchAll
,因为您在第一个查询中只选择了一行。从我的第一个查询中选择*但是
哪里countid='1'
或者是否有多行
countid=1
以及
数据中的哪一列
表将其链接到
weeks
user
表致命错误:无法在第17行的/home/villabul/domains/yazlikvillabul.com/public_html/uyelik/test.php中使用stdClass类型的对象作为数组:$data[$key]>weeks[]=$stmt->fetchAll(PDO::FETCH_OBJ);修正了相同的致命错误:无法在/home/villabul/domains/yazlikvillabul.com/public_html/uyelik中将stdClass类型的对象用作数组‌​/第17行的test.php