У меня есть процедура с набором команд 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
между запросами один и два: