Bagaimanakah saya boleh mengembalikan berbilang data respons dalam satu respons menggunakan PHP dan PDO?

DDD
Lepaskan: 2024-10-27 06:02:02
asal
172 orang telah melayarinya

How can I return multiple response data in one response using PHP and PDO?

Kembalikan Berbilang Data Respons dalam Satu Respons

Kod yang disediakan cuba untuk mendapatkan berbilang rekod daripada pangkalan data dan mengembalikannya dalam satu respons. Walau bagaimanapun, disebabkan penggunaan fetchAll yang salah, ia tidak dapat menggabungkan hasil dan mengembalikan output yang diingini.

Kod berikut menyediakan penyelesaian yang diperbetulkan:

<code class="php">try {
    $dbAdapter = new DbAdapter();

    $connection = $dbAdapter->connect();

    // User IDs to be fetched.
    $userIds = [1, 2];

    // The sql statement - it will be prepared.
    $sql = 'SELECT 
                users.id AS userid,
                users.name AS username,
                subjects.id AS subject_id,
                subjects.name AS subject_name,
                subjects.points AS active_points,
                IFNULL(SUM(subjects.points), 0) AS total_points,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM subjects 
                    WHERE 
                        userid = users.id AND semester = 1
                ) AS semester_1_points,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM subjects 
                    WHERE 
                        userid = users.id AND semester = 2
                ) AS semester_2_points,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM subjects 
                    WHERE 
                        userid = users.id AND semester = 3
                ) AS semester_3_points 
            FROM 
                tbsubjects AS subjects 
                LEFT JOIN tbusers AS users ON users.id = subjects.userid 
            WHERE subjects.userid IN (:userIds) 
            GROUP BY subjects.userid 
            ORDER BY subjects.time DESC';

    // The input parameters list for the prepared sql statement.
    $bindings = array(
        ':userIds' => $userIds,
    );

    // Prepare and validate the sql statement.
    $statement = $connection->prepare($sql);

    if (!$statement) {
        throw new UnexpectedValueException('The sql statement could not be prepared!');
    }

    // Bind the input parameters to the prepared statement.
    foreach ($bindings as $key => $value) {
        $bound = $statement->bindValue(
            getInputParameterName($key),
            $value,
            getInputParameterDataType($value)
        );

        if (!$bound) {
            throw new UnexpectedValueException('An input parameter can not be bound!');
        }
    }

    // Execute the prepared statement.
    $executed = $statement->execute();

    if (!$executed) {
        throw new UnexpectedValueException('The prepared statement could not be executed!');
    }

    // Fetch users list - array of objects.
    $users = $statement->fetchAll(PDO::FETCH_OBJ);

    if ($users === FALSE) {
        throw new UnexpectedValueException('Fetching users list failed!');
    }

    // Close connection.
    $connection = NULL;

    // Handle results.
    if (empty($users)) {
        $response->getBody()->write(
            '{
                "error": {
                    "message":"Invalid"
                }
            }'
        );
    } else {
        $response->getBody()->write(json_encode($users));
    }
} catch (PDOException $exc) {
    echo $exc->getMessage();
    // $logger->log($exc);
    exit();
} catch (Exception $exc) {
    echo $exc->getMessage();
    // $logger->log($exc);
    exit();
}</code>
Salin selepas log masuk

Dalam penyelesaian ini:

  1. Kaedah fetchAll digunakan dengan PDO::FETCH_OBJ untuk mendapatkan semula tatasusunan objek, di mana setiap objek mewakili baris dalam set hasil.
  2. Tersuai getInputParameterName() dan getInputParameterDataType () fungsi digunakan untuk mengikat parameter input dengan betul pada pernyataan yang disediakan.
  3. Fungsi IFNULL digunakan untuk mengendalikan nilai nol dalam lajur total_points, semester_1_points, semester_2_points dan semester_3_points, memastikan bahawa ia dikembalikan sebagai sifar jika null.

Akibatnya, kod ini mengambil berbilang baris daripada pangkalan data dengan betul dan menggabungkannya menjadi satu respons, yang sepadan dengan output yang dijangkakan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengembalikan berbilang data respons dalam satu respons menggunakan PHP dan PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!