PHP PDO: Как показать затронутые строки UPDATE вместе с результатами SELECT с процедурой? - PullRequest
0 голосов
/ 31 января 2019

У меня есть процедура с набором команд SELECT и UPDATE.Используя PHP и PDO, для каждого запроса я хочу видеть либо результаты, либо затронутые строки;однако это не работает для UPDATE, INSERT или DELETE запросов (если только они не являются единственным запросом в процедуре).Я могу получить результаты из команд SELECT, используя $stmt->nextRowset();, однако не могу получить общее количество записей, которые были обновлены, удалены или вставлены.Как я могу получить поврежденные строки?

Вот мой PHP-код:

$stmt = $connection->query($query);

do {
    // updates the counter for each procedure query
    $j++;

    // gets the total rows from each rowset
    $totalRows = $stmt->rowCount();
    $data = getColumnData($connection, $stmt);

    // checks if any data was returned
    if (!$data) {
        $rowText = $totalRows == 1 ? "row was" : "rows were";
        $queryData .= $totalRows != 0 ? "<p><label>Procedure Query {$j}</label></p><p class='success'>A total of {$totalRows} {$rowText} affected!</p>" :"<p><label>Procedure Query {$j}</label></p><p><i class='fa fa-exclamation-triangle'></i> No results were returned! Check the query outside the procedure.</p>";

    // displays the rows affected for other queries
    } else {
        $queryData .= "<p><label>Procedure Query {$j}</label></p><p class='success'>A total of {$totalRows} rows were returned!</p>{$data}";
    }
} while ($stmt->nextRowset());

Вот пример процедуры, которую я быстро написал, чтобы продемонстрировать, как эта процедура выглядит:

DELIMITER $$
CREATE PROCEDURE get_orders(IN vDate Date)
BEGIN
  SELECT *
  FROM `order`;

  UPDATE `order`
  SET `order_date` = vDate;

  SELECT *
  FROM `order`;
END$$
DELIMITER ;

CALL get_orders(Curdate() - 1);

Это вывод, но, как вы можете видеть, отсутствует пропущенный результат для UPDATE между запросами один и два: enter image description here

...