2015-07-24 7 views
0

Как я могу повторить, сколько записей было обновлено с помощью этого кода? Я знаю, что я могу сделать это в общем обновлении:PDO Как эхо сколько обновлено

echo $stmt->rowCount() . " records UPDATED successfully"; 

Но здесь вопрос в том, как это сделать, когда есть несколько обновлений одновременно.

ЗАМЕЧАНИЕ О ВОЗМОЖНОМ ДУБЛИРОВАНИИ: Я уже объяснил, что мой вопрос отличается от: PDO were rows affected during execute statement Это решение предназначено для одного обновления, и оно не работает в этом коде. Я спрашиваю, как подсчитать, когда есть несколько обновлений.

try { 
    require_once 'connexion.php'; 

    $stmt = $conn->prepare("UPDATE bookmarks 
          SET podcast=:podcast, text=:text 
          WHERE id=:id"); 
    $stmt->bindParam(':podcast', $podcast); 
    $stmt->bindParam(':text', $text); 
    $stmt->bindParam(':id', $id); 

    $podcast = 1; 
    $text = "text 1"; 
    $id = 147; 
    $stmt->execute(); 

    // another row: 
    $podcast = 2; 
    $text = "text 2"; 
    $id = 265; 
    $stmt->execute(); 

    // echo " records UPDATED successfully"; 
} 

catch(PDOException $e){ 
    echo $e->getMessage(); 
} 
+0

Это какой-то напуганный код у вас происходит там. Что вы пытаетесь достичь с помощью этого скрипта? – Ben

+0

'$ stmt -> rowCount()' Функция 'rowCount()' возвращает количество затронутых строк –

+0

Возможный дубликат [PDO были строк, затронутых во время выполнения оператора] (http://stackoverflow.com/questions/10522520/pdo -were-rows-affected-upon-execute-statement) – Lexib0y

ответ

1

Попробуйте это.

Как вы делаете множественным ->execute() вам придется захватить количество каждого ->execute(), как вы это делаете, а затем показать накопленный общий счет в конце

try { 
    require_once 'connexion.php'; 
    $update_count = 0; 

    $stmt = $conn->prepare("UPDATE bookmarks 
          SET podcast=:podcast, text=:text 
          WHERE id=:id"); 
    $stmt->bindParam(':podcast', $podcast); 
    $stmt->bindParam(':text', $text); 
    $stmt->bindParam(':id', $id); 

    $podcast = 1; 
    $text = "text 1"; 
    $id = 147; 
    $stmt->execute(); 

    $update_count += $stmt->rowCount(); 


    // another row: 
    $podcast = 2; 
    $text = "text 2"; 
    $id = 265; 
    $stmt->execute(); 

    $update_count += $stmt->rowCount(); 


    echo "$update_count records UPDATED successfully"; 
} 

catch(PDOException $e){ 
    echo $e->getMessage(); 
} 
+0

Действительно? Дублированный ответ? :) – Mark

+0

Ну его немного отличается, поскольку я предполагаю, что он пропустил, что ему придется захватить '-> rowCount()' после каждого '-> execute()', а не только один раз в конце 'try block' – RiggsFolly

+0

Нет вы получите 1 за каждое обновление. он сообщает, сколько строк было обновлено при выпуске '-> execute()' Если вы дважды выпускаете обновление с одинаковыми критериями, то обновление будет успешно запущено оба раза. Поэтому каждый '-> rowCount' вернется 1 – RiggsFolly

0

Пробег: $stm->rowCount(). Источник здесь: http://php.net/manual/en/pdostatement.rowcount.php

Вопрос был уже задавала и здесь: https://stackoverflow.com/a/10522575/2853903

+0

Если мы педантичны - это действительно должен был комментарий, поскольку это не ответ на этот конкретный вопрос. – RiggsFolly

+0

Правда. Так как у меня нет рейтинга, вы бы подумали о том, чтобы отметить вопрос как дубликат? – Mark

+0

Ну, я действительно не считаю это дубликат, поскольку он достаточно отчетливо отличается от другого вопроса/ответа, который мы с тобой пытались найти, чтобы ответить на этот вопрос, требуя больше деталей, чем было указано в другом ответе. – RiggsFolly